[Django] 회원가입, 로그인, 로그아웃

최더디·2020년 9월 2일
0

회원가입, 로그인, 로그아웃 기능은 장고에서 제공하는 함수이용한다.
Django에서 이미 기능을 제공하고 있는 것들을 우리는 가져다 쓰는 것 뿐이다.

📌 회원가입, 로그인, 로그아웃을 만드는 순서


  1. '계정'을 담당할 APP 을 만든다.
  2. 그 안에 회원가입 함수, 로그인함수, 로그아웃 함수를 만든다.
  3. 그에 맞는 url 와 html 도 만든다.

📌 views.py


회원가입, 로그인, 로그아웃 함수를 사용하기 위해서 import 해야할 것이 있다.

  • from django.contrib.auth.models import User
  • from django.contrib import auth
from django.contrib.auth.models import User   # user에 대한 클래스를 가져와준다.
from django.contrib import auth               # 계정에 대한 권한에 대한 것을 가져와준다.

회원추가 함수 (회원가입)


  • User.objects.create_user()
  • create_user(username, password)
def signup(request):
    if request.method == "POST":
        if request.POST['password1'] == request.POST['password2']:
            user = User.objects.create_user(username = request.POST['username'], password=request.POST['password1'])
            auth.login(request, user)
            return redirect('home')
    return render(request, 'signup.html')

로그인 함수


  • auth.authenticate() : 등록된 회원인지 확인
  • auth.login(request, user) : 로그인
def login(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        #auth.authenticate 라는 말은 DB에서 방금전에 입력한 이 내용이 우리한테 있는 회원명단이 맞는지 확인시켜주는 함수
        user = auth.authenticate(request, username=username, password=password)

        if user is not None:    # is not None = None이 아니라면 = 회원이라면
            auth.login(request,user)
            return redirect('home')
        else:
            return render(reuqst, 'login.html', {'error': 'username or password is incorrect'})
    else:
        return render(request, 'login.html')

로그아웃 함수


  • auth.logout(request) : 로그아웃
def logout(request):
    if request.method == "POST":
        auth.logout(request)
        return redirect('home')
    return render(request,'login.html')
login.html
{% extends 'base.html' %}

{% block contents %}
    <h1>Login!</h1>

    <!--form태그 POST방식으로 쓸꺼면 보안을 위해서 csrf_token을 써주는게 좋다-->
    <!--회원가입과 같은 정보를 처리할때는 POST 방식으로 처리해줘야한다.-->
    <form method= "POST" action ="{% url 'login' %}">
        {% csrf_token %}    <!--보안을 위해서 써주는 난수 발생기, csrf 방해를 방어해주는 것.-->
        Username:
        <br>
        <input name="username" type = "text" value="">
        <br>
        Password:
        <br>
        <input name="password" type = "password" value="">
        <br>
        <br>
        <input class="btn btn-primary" type="submit" value="Login">
    </form>
{% endblock %}

📌 signup.html


{% extends 'base.html' %}

{% block contents %}
    <h1>Sign up!</h1>

    <!--form태그 POST방식으로 쓸꺼면 보안을 위해서 csrf_token을 써주는게 좋다-->
    <!--회원가입과 같은 정보를 처리할때는 POST 방식으로 처리해줘야한다.-->
    <form method= "POST" action ="{% url 'signup' %}">
        {% csrf_token %} <!--보안을 위해서 써주는 난수 발생기, csrf 방해를 방어해주는 것.-->
        Username:
        <br>
        <input name="username" type = "text" value="">
        <br>
        Password:
        <br>
        <input name="password1" type = "password" value="">
        <br>
        Fonfirm Password:
        <br>
        <input name="password2" type = "password" value="">
        <br>
        <br>
        <input class="btn btn-primary" type="submit" value="sign up">
    </form>
{% endblock %}

📌 csrf_token 이란?


  • 보안을 위해서 써주는 난수 발생기
  • csrf 방해를 방어해주는 것이다.
  • form 태그 POST방식으로 쓸꺼면 보안을 위해서 csrf_token을 써주는게 좋다.

📌 http Method (웹 상에서 정보를 주고받는 방식)


  • GET : url 에 정보 전달 된 것이 그대로 노출된다.

  • POST : url로 직접 정보가 노출되지 않는다.

  • Method를 지정하지 않으면 GET방식!

  • 그래서 request.GET['xxx'] 로 form 입력값을 갖고 온 것이다.

profile
focus on why

0개의 댓글