728x90
반응형
Django 프로젝트에 AbstractUser 적용
Django 프로젝트에 AbstractUser 적용하는 방법을 정리하겠습니다.
Django 프로젝트에 AbstractUser 구성 방법
model.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=20, blank=True, null=True)
updatedDate = models.DateTimeField(auto_now=True)
기존 유저 구조에 User에 필요한 field를 추가 할수 있으니 원하는 것을 추가하면 된다.
views.py
from django.shortcuts import render, redirect
from django.views import View
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse
from testapp.models import User
# Create your views here.
class LoginView(View):
def get(self,request):
return render(request, 'login.html')
def post(self, request):
req = request.POST
username = req['username']
password = req['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user=user)
return redirect("/")
else:
return HttpResponse("Unauthorized", status=400)
class SignUpView(View):
def get(self,request):
return render(request, 'signup.html')
def post(self, request):
req = request.POST
username = req['username']
password = req['password']
User.objects.create_user(username=username,password=password)
return HttpResponse("User created", status=200)
class LogOutView(View):
def post(self, request):
logout(request)
return redirect('/')
- Login
- authenticate 함수로 접속을 확인
- login 함수고 접속
- GET 에 연결 page 를 render 함수로 login.html 파일 적용
- Signup
- create_user 함수로 user 와 password로 저장 _user 붙은 함수는 password를 암호화 해서 저장해준다.
- create 로 만들 경우 password에 값 그대로 저장 된다.
- GET 에 연결 page를 render 함수로 signup.html 파일 적용
- create_user 함수로 user 와 password로 저장 _user 붙은 함수는 password를 암호화 해서 저장해준다.
- Logout
- POST에서 logout 함수로 바로 로그아웃 해준다.
HTML 테스트 파일
testapp 폴더 아래에 templates 라는 폴더를 생성해준다. 바로 인식하기에 폴더명만 맞추면 된다.
testapp/templates/login.html
<form method="POST" action="{% url 'login' %}">
{% csrf_token %}
<p>username</p>
<input type="text" name="username">
<br>
<p>password</p>
<input type="text" name="password">
<br>
<input type="submit" value="login">
</form>
testapp/templates/signup.html
<form method="POST" action="{% url 'signup' %}">
{% csrf_token %}
<p>username</p>
<input type="text" name="username">
<br>
<p>password</p>
<input type="text" name="password">
<br>
<p>confirm</p>
<input type="text" name="confirm">
<br>
<input type="submit" value="register">
</form>
mysite/urls.py
from django.contrib import admin
from django.urls import path
from testapp.views import LoginView, SignUpView, LogOutView
urlpatterns = [
path('login/', LoginView.as_view(), name="login"),
path('signup/', SignUpView.as_view(), name="signup"),
path('logout/', LogOutView.as_view(), name="logout"),
]
path에 접속 url 을 넣어주고 testapp 에 view를 연결해 준다.
mysite/settings.py
AUTH_USER_MODEL = 'testapp.User'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
AbstractUser 사용시에 Setting에서 auth user 모델을 설정해줘야하며 DEFAULT_AUTO_FIELD 도 설정해줘야 warning 이 안뜬다. CSRF 설정을 위해 middelware에 django.middleware.csrf.CsrfViewMiddleware 를 추가해준다.
여기까지 하고 migrate 작업 해주고 실행해 보자.
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
웹에서 http://localhost:8000/signup/ 으로 localhost는 각자 맞게 변경하시어 접속해보면 아래와 같은 간단한 화면을 볼수 있다. 항목 체워서 resgister를 누르면 등록이 된다.
sqlite DB 확인
python manage.py dbshell 로 db에 어떻게 생성 되었는지 확인하자. db.sqlite3 파일의 내용을 확인 할수 있다.
$ python manage.py dbshell
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite>
DB 파일명 및 테이블 리스트 확인
sqlite> .database
main: /home/test/mysite/db.sqlite3
sqlite> .tables
auth_group django_migrations
auth_group_permissions django_session
auth_permission testapp_user
django_admin_log testapp_user_groups
django_content_type testapp_user_user_permissions
sqlite>
user 테이블 확인
sqlite> select * from testapp_user;
1|pbkdf2_sha256$390000$tECCusXUT7XNQteWvlwj8b$DVPzL2MtCxWD9rfCW2vr9ihkof8QgHoc01juk9qo92I=||0|test||||0|1|2022-12-08 01:31:06.195738||2022-12-08 01:31:06.285785
sqlite>
728x90
반응형
'언어 > PYTHON' 카테고리의 다른 글
[Python] Selenium 예약 프로그램 기능 (0) | 2023.04.11 |
---|---|
[Django] Custom User 적용 (0) | 2022.12.02 |
[Django] 프로젝트 실행 (1) | 2022.12.01 |
[Django] Python 환경 구성 (0) | 2022.11.30 |
댓글