반응형

참고

https://www.youtube.com/watch?v=KClEOUOeFUQ

https://docs.djangoproject.com/en/3.1/ref/contrib/auth/


순서

앱 생성 및 등록->models.py작성->url작성->views.py작성->templates(html)작성




앱 생성 및 등록

-앱 생성(하단 terminal창에 입력)

1
django-admin startapp users
cs


-앱 관련 설정

mysite/settings.py 수정


1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
    'users',
]

cs


users앱을 추가해 줍니다.



모델작성


users/models.py 작성

1
2
3
4
5
6
7
8
9
from django.db import models
from django.contrib.auth.models import AbstractUser
 
class User(AbstractUser):#AbstractUser상속
    #새로운 인자 추가가능
    #예시
    #jobs=models.CharField(max_length=10)
    pass
 

cs

AbstactUser를 상속받으면 django에서 기본적으로 제공되는 User를 사용할수 있습니다.

이후 추가할 인자가 있다면 추가해 주시면됩니다.


장고는 기본적으로 Auth밑에 있는 User를 사용하는데 우리는 커스텀유저를 사용하기 위해 settings.py에 명시해 주어야 합니다. 또한 이전에 사용했던 User(Auth밑의 User)와 충돌 할수 있기때문에 db파일(db.sqlite3)을 지우고 새로 만들어 줍니다. superuser도 다시만들어줍니다.


mysite/settings.py에 추가

1
AUTH_USER_MODEL='users.User'
cs


db파일을 지운 후 terminal창에 입력

1
2
3
4
5
python manage.py makemigrations
python manage.py migrations
 
 
python manage.py createsuperuser
cs



관리자페이지에서 users모델을 보기위해 admin.py에 모델을 등록해줍니다.

users/admin.py 수정

1
2
3
4
5
6
from django.contrib import admin
from .models import User
# Register your models here.
 
admin.site.register(User)
 

cs




url설정


-mysite/urls.py수정

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
    path('auth/',include('users.urls')),
  ]

cs


-users/urls.py생성

1
2
3
4
5
6
7
8
9
10
from django.urls import path
from .import views
 
app_name="users"
 
urlpatterns = [
    path("login",views.users_login,name="login"),
    path("logout",views.users_logout,name="logout"),
    path("signup",views.users_signup,name="signup")
]

cs


기본적으로 로그인에 필요한 로그인/로그아웃/회원가입을 만들겠습니다.

url을 미리 만들어 놓았습니다.


이제 views.py에 함수를 추가하여 봅시다.



View 작성

users/views.py 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from django.shortcuts import render
from django.contrib.auth import authenticate,login,logout
from django.shortcuts import redirect
from .models import User
# Create your views here.
def users_login(request):
    if request.method=='POST':
        username=request.POST["username"]
        password=request.POST["password"]
        user=authenticate(username=username,password=password)
        if user is not None:
            print("인증성공")
            login(request,user)
        else:
            print("인증실패")
    return render(request,"users/login.html")
 
 
def users_logout(request):
    logout(request)
    return redirect("users:login")
 
 
def users_signup(request):
    if request.method=="POST":
        print(request.POST)
        username=request.POST["username"]
        password=request.POST["password"]
        lastname=request.POST["lastname"]
        email=request.POST["email"]
 
        user=User.objects.create_user(username,email,password)
        user.last_nam=lastname
        user.save()
        return redirect("users:login")
 
    return render(request,"users/signup.html")
cs


auth밑에 authenticate,login,logout를 통해 쉽게 구현할수 있습니다.

모델을 추가한후 로그인함수에서는 POST로 username과 password를 받아

인증과정을 거친뒤 세션아이디를 부여해줍니다.

로그아웃 함수에서는 세션을 정리합니다.

회원가입에서는 각 User인자들을 입력받은뒤 회원가입을 진행합니다.


이제 각 view에 맞는 html을 작성해 봅시다.



Templates 작성


users/templates/users/login.html 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{% extends 'blog/base.html' %}
 
{% block content %}
 
{% if user.is_authenticated %}
    로그인성공!
    {{ user.username}}님 환영합니다.
{% else %}
    <form action="" method="POST">
    {% csrf_token %}
    <input name ="username" type="text">
    <input name ="password" type="password">
    <input type ="submit" value="로그인">
    </form>
   <a href="{% url 'users:signup' %}">회원가입</a>
{% endif %}
 
{% endblock %}

cs

session의 여부는 user.is_authenticated를 통해 확인할수 있습니다.

로그인 되있을시의 화면과 로그아웃 되있을때의 화면을 달리 보이도록 하였습니다.



users/templates/users/signup.html 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% extends 'blog/base.html' %}
 
{% block content %}
 
<form action="" method="POST">
    {% csrf_token %}
    <p>아이디</p>
    <input name="username" type="text">
    <p>비밀번호</p>
    <input name="password" type="password">
    <p>이름</p>
    <input name="lastname" type="text">
    <p>이메일</p>
    <input name="email" type="text">
    <p></p>
    <input type="submit" value="회원가입">
</form>
 
{% endblock %}
cs



마지막으로 navbar에서 로그인 로그아웃을 할수있도록 아이콘을 만들어 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<nav class="navbar">
        <div class="navbar__logo">
            <i class="fas fa-apple-alt"></i>
            <a href="/">Strwberry</a>
        </div>
        <div class="navbar__menu">
          <li><a href="">Home</a></li>
          <li><a href="">blog</a></li>
          <li><a href="">git</a></li>
          <li><a href="">QnA</a></li>
          <li><a href="">Farm</a></li>
        </div>
 
        <div class="navbar__icons">
            {% if user.is_authenticated %}
            <li><a href="{% url 'users:logout' %}"><i class="fas fa-sign-out-alt"></i></a></li>
            {% else %}
            <li><a href="{% url 'users:login' %}"><i class="fas fa-sign-in-alt"></i></a></li>
            {% endif %}
            <li><i class="fab fa-twitter"></i></li>
            <li><i class="fab fa-facebook"></i></li>
        </div>
 
        <a href="#" class="navbar__toogleBtn">
            <i class="fas fa-bars"></i>
        </a>
 
 </nav>
 

cs


이렇게 기본적인 로그인기능을 구현해 보았습니다.

소셜로그인이나 이메일 인증을 통한 가입도 추가해볼수 있으며 다음시간에는 게시글도 작성자인지에 따라 보여지는 부분이 다르도록 수정해 보겠습니다.


반응형

'웹개발 > Django' 카테고리의 다른 글

Django 텍스트에디터(ckeditor) #14  (0) 2020.12.25
Django 소셜로그인 #13  (0) 2020.12.24
Django 페이징 #11  (0) 2020.12.20
Django 네비게이션바 #10  (0) 2020.12.14
Django 추가,수정 페이지 만들기 #9  (0) 2020.12.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기