4주차 WIL

looggi·2022년 9월 26일
1

스파르타 내배캠 AI-3

목록 보기
22/130
post-thumbnail

🦊 Django 1-2주차

🌵 프로젝트 구조 만들기

  • 프로젝트 기능을 생각해서 앱 만들기

    $ django-admin startapp 앱이름

  • 장고 프로젝트에 앱 알려주기

    settings.py의 INSTALLED_APPS에 앱 이름 추가

  • 앱의 각 요소에 어떤 데이터 형식이 들어갈지 정하기(m)

    앱이름/models.py

  • 모델 데이터베이스에 넣기
    (데이터베이스 변경 사항 알려주기)

    python manage.py makemigrations

  • 변경된 데이터베이스 적용시키기
    (변경된 데이터베이스 반영해주기)

    python manage.py migrate

  • 데이터베이스 모델을 관리자페이지(admin)에 등록하기(ORM)

    앱이름/admin.py

    from django.contrib import admin
    from .models import 클래스이름
    # 같은 앱폴더 안에 있는 models.py에서 클래스 임포트
    # Register your models here.
    admin.site.register(모델링한 요소들을 포함하는 클래스이름)
  • 화면 만들기(t)

    앱 안이나 밖에 templates 폴더 만들어서 그 안에 html파일 만들기

🌵 url - view - template 이어주기

  • 동작 순서
    가장 처음 만든 앱(settings.py가 있음)의 urls.py
    -> 등록된 url 찾기-> 앱의 urls.py -> 해당 url에 등록된 view
  1. 작성한 url 연결해주기
    가장 처음 만든 앱의 urls.py에

    from django.urls import path, include
    -> include 추가함
    urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('user.urls'))
    ]
    -> path('', include('user.urls')) 추가함
    -> user 앱의 urls.py에 연결시킨다는 뜻

  2. 앱의 urls.py에 연결할 앱의 views.py 작성하기
    render를 사용해서 어떤 페이지(template=html)을 띄울건지
from django.shortcuts import render


# Create your views here.
def sign_up_view(request):
    return render(request, 'user/signup.html')

def sign_in_view(request):
    return render(request, 'user/signin.html')
  1. 작성한 '앱의 views.py'를 '앱의 urls.py'에 연결하기
from django.urls import path
from . import views
# 같은 위치의 views.py를 임포트

urlpatterns = [
    path('sign-up/', views.sign_up_view, name='sign-up'),
    path('sign-in/', views.sign_in_view, name='sign-in'),
]

path('해당 페이지 url주소', views.views에서 작성한 render리턴하는 함수이름, name=해당 페이지 이름

🌼 참고: Model - View - Template 패턴 🌼

  • model: 데이터베이스의 모델
    -앱을 어떤 요소들로 구성할지, 그 요소들이 어떤 형식을 가질지 클래스 형태로 만들어져서(ORM) 데이터베이스에서 사용됨
  • template: templates 폴더 내부에 있는 html 파일
    -사용자가 보는 화면
  • view: url 요청 후 응답하기까지의 프로그램을 동작시키는 부분

🌼 참고: get 과 post 🌼

http 요청 방식❓메서드

  • get: 데이터를 읽어올 때 사용
  • post: 데이터를 주거나 수정 삭제를 할 때 사용

🌵 회원가입 기능 만들기

회원가입하는 페이지를 보여주는 url: sign-up
-> 보여주는 것이기 때문에 get 방식을 사용해서 페이지를 띄워주면 됨

  • 앱의 views.py에서 렌더를 리턴해주는 함수에 if문 추가 작성
if request.method == 'GET': #요청 방식이 get일 때
return render(request, 'user/signup.html')
elif request.method == 'POST': # 요청 방식이  POST 일 경우
  • signup.html에서 <form 태그>에 method, action 추가
<form class="form-area" method="post" action="/sign-up/">
{% csrf_token %}

-> {% csrf_token %}는 요청방식이 post일때 보안을 위해 사용

  • <form태그>의 가장 마지막 <button 태그>는 form 태그의 method로 action에 데이터를 보내준다
<button type="submit" class="btn btn-primary">회원가입</button>
  • signup.html에서 input 받는 내용은 모두 views.py dㅢ sign_up_view 함수 안으로 들어간다
    (html에서 받은 데이터를 views.py에서 다룬다)
    -> 요청 방식이 포스트일 때 수행할 것들을 elif 아래 작성
elif request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)
        password2 = request.POST.get('password2', None)
        bio = request.POST.get('bio', None)
        if password != password2:
            return render(request, 'user/signup.html')
        else:
            new_user = UserModel()
            new_user.username = username
            new_user.password = password
            new_user.bio = bio
            new_user.save()
        return redirect('/sign-in')

-> username, password, password2, bio의 기본값은 none
-> 두번째 if문에서 비밀번호가 다르면 회원가입 화면을 다시 띄워준다
-> 비밀번호가 같다면 models.py의 usermodel()로 db를 만들어 저장
-> 회원가입 완료시 로그인 페이지(/sign-in)로 이동(redirect)

profile
looooggi

0개의 댓글