Django/Django 회원 관리

Django 회원 관리 서브앱(app) 로그인 기능 구현

jinsang-2 2024. 4. 19. 21:51

1-1. User app 생성

python manage.py startapp users

1-2. users 서브앱 등록 (settings.py)

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'users',
  ]

1-3. users의 models.py

Django에서는 기본 유저모드를 지원해 준다. AbstractUser , User,  AbstractBaseUser 세개를 지원해준다.

  • from django.contrib.auth.models import User : 기본 제공 해주는 것만 사용 가능(id, password...등)
  • from django.contrib.auth.models import AbstractUser : 상속해서 기존 제공 이외에 새로운 것을 추가 가능
  • from django.contrib.auth.models import AbstractBaseUser : 처음부터 끝까지 다 설계
from django.db import models
from django.contrib.auth.models import AbstractUser

class Users(AbstractUser):
    mbti = models.CharField(max_length=4)

 

1-4. settings.py 추가

default : auth.User 이기에

우리만의 custom user을 만들기 위해 아래 내용을 추가해야한다. 

AUTH_USER_MODEL = 'users.Users'

1-5. migration 진행

python manage.py makemigrations

python manage.py migrate

 

1-6 createsuperuser 생성

admin 으로 생성함

python manage.py createsuperuser

1-7. runserver

python manage.py runserver

1-8. users의 admin.py

from django.contrib import admin
from .models import Users
admin.site.register(Users)

1-9. admin으로 관리 서버 들어가기

http://127.0.0.1:8000/admin/

눌러서 밑으로 내려가면

Mbti 항목이 추가된 것을 확인 할 수 있다. 

 

 

2-1. 메인 urls.py에서 서브앱 연결 

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('users.urls')),
]

2-2. users 서브앱 폴더 내부에 urls.py 생성, app_name : users

from django.urls import path
from . import views

app_name = "users"

urlpatterns = [
    path('login/',views.login_view, name="login"),
    
]

2-3. users의 views.py

authenticate : 인증

login(request, user) : 로그인

logout(request) : 로그아웃

from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout

def login_view(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(username=username, password=password)
        print(user)
        if user is not None:
            print("인증성공")
            login(request, user)
        else:
            print("인증실패")
    return render(request,"user/login.html")

 

2-4. templates폴더 생성

users와 main 앱과 같은선상

 

2-5. settings.py BASE_DIR 설정

2-6 login.html

로그아웃 만들고 싶으면 urls.py logout만들고 views에 로그아웃 함수 만들고 logout(request) 넣으면됨

user.is_authenticated : 로그인 중이라면

로그인 페이지
<br>
{% if user.is_authenticated %}
    로그인성공!
    {{ user.username }}님 환영합니다. 
    <a href="{% url 'users:logout' %}">로그아웃</a>

{% else %}
<form action="" method ="POST">
    {% csrf_token %}
    <input name="username" type = "text">
    <input name="password" type = "password">
    <input name=""
    <input type="submit" value="로그인">
</form>

{% endif %}