코딩 개발일지

TIL 16일차 - 장고 Admin과 로그인, 회원가입 페이지 본문

AI 본 교육/AI 4주차

TIL 16일차 - 장고 Admin과 로그인, 회원가입 페이지

호기호 2023. 8. 31. 14:59

관리 페이지를 만들기위해서는 Django에서 제공하는 super user를 만들어야 admin(관리) 페이지에 접근 할 수 있음 !!!!!

터미널창에서 python manage.py createsuperuser 라고 타이핑해주면, 관리자 아이디를 만드는 과정이 나옴.

 

Username (leave blank to use 'home'): 
Email address:
Password:
Password (again):

 

터미널에서 위에 정보를 입력하면, Admin계정(관리자 게정) 아이디가 생성됨.


GET과 POST를 이용해서 회원가입 / 로그인 페이지를 만들어 봤다.

GET은 대부분 '값을 읽어 올 때' 사용하고, POST는 값을 주고나 수정, 삭제를 요청 할 때 사용한다.

 

html의 form 태그에 method와 action을 추가한다. form태그의 method로 action에 데이터를 보내주는 역할을 한다. (중요)

{% csrf_token %} 은, Django에서 post 할 때에 보안을 위해서 사용 해 줘야 함.

앞으로 post 메서드를 만들 때 (보안이 중요할 때) 무조건적으로 쓰일 것 같음.

 

(아래는 templates > user . signup.html 또는 signin.html 중에서 form 부분)

<form class="form-area" method="post" action="/sign-up/">
        {% csrf_token %}

html에서 넘겨준 데이터를 views.py에서 받아주고, 내용을 채운다!

 

(아래는 views.py)

from django.shortcuts import render, redirect
from .models import UserModel
from django.http import HttpResponse

# Create your views here.
def sign_up_view(request):
    if request.method == 'GET':
        return render(request, 'user/signup.html')
    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:
            exist_user = UserModel.objects.filter(username=username)

            if exist_user:
                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')

def sign_in_view(request):
    if request.method == 'POST':
        username = request.POST.get('username', None)
        password = request.POST.get('password', None)

        me = UserModel.objects.get(username=username)
        if me.password == password:
            request.session['user'] = me.username
            return HttpResponse(f'{me.username}님 로그인 성공')
        else:
            return redirect('/sign-in')

    elif request.method == 'GET':
        return render(request, 'user/signin.html')

중간에

exist_user = UserModel.objects.filter(username=username)

if exist_user:
    return render(request, 'user/signup.html')

이 부분을 통해서 이미 아이디가 데이터베이스에 있을 경우에는 다시 signup 페이지로 돌아가도록 설정함.