장고의 장점 중에 하나인 내장된 User 모델을 활용하여 유저 관리를 쉽게 할 수 있다.


장고 authentication system에서 User 모델에 대한 설명이 있다.

https://docs.djangoproject.com/en/1.10/topics/auth/default/


위 자료를 통해 User 모델의 속성을 파악할 수 있고,

실제로 어떤 코드로 User 모델이 짜여져 있는지 확인하려면 아래 깃허브를 따라서 살펴볼 수 있다.
https://github.com/django/django/blob/master/django/contrib/auth/models.py



User 모델의 사용 목적은 회원가입을 받아서 회원들의 데이터를 저장하고자하는 것이다.

회원가입 폼을 만들어 "username" "email" "password"를 입력 받는다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
{% extends "base.html" %}
{% block title %}my_project{% endblock %}
{% block body %}
<div class="container">
  <form method="post" action="" class="form-signin">
    {% csrf_token %}
    <h2 class="form-signin-heading">Please sign in</h2>
    <input type="username" name="username" class="form-control" placeholder="Username" required="" autofocus="">
    <input type="email" name="email" class="form-control" placeholder="Email address" required="">
    <input type="password" name="password" class="form-control" placeholder="Password" required="">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  </form>
</div>
{% endblock %}
cs


1
<input type="username" name="username" class="form-control" placeholder="Username" required="" autofocus="">
cs


(*autofocus는 해당 웹페이지를 처음 열었을 때, 입력 폼에서 "username"을 입력하는 칸에 커서가 깜빡이도록 설정)


앞서 말했듯 장고에서 별도로 User 모델을 갖추고 있으므로 models.py에서 우리가 관여할 것은 전혀 없다.

User 모델이 저장된 곳에서 view로 잘 불러오기만 하면 된다. (from django.contrib.auth.models import User)

그리고 폼에서 입력 받은 데이터를 view에서 처리하여 하나의 user 객체로 만들어 User 모델에 저장된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from django.shortcuts import render
from django.contrib.auth.models import User
 
# Create your views here.
def index(request):
    ctx = {}
    return render(request, "index.html", ctx)
 
def signup(request):
    if request.method == "GET":
        pass
    elif request.method == "POST":
        username = request.POST.get("username")
        email = request.POST.get("email")
        password = request.POST.get("password")
 
        user = User.objects.create_user(username, email, password)
 
    ctx = {}
    return render(request, "signup.html", ctx)
cs



user 인스터스가 만들어질 때 기존의 방식과 다른 점이 있다.


하나는 user 변수에 데이터를 입력 받은 객체를 담는다는 것이다.


두번째는 User.objects.create가 아닌 User.objects.create_user로 작성하는 것이다.


이 차이에 발생하는 장점은 폼에서 password를 입력한 그대로 저장되어 관리자에게 보여지지 않고,

특수 암호화되어 관리자도 볼 수 없게 처리하기 때문에 보안측면에서 도움이 된다.

블로그 이미지

쵸잇

,