기초다지기/기초 Django
2023-04-06 Django 수정하기
jung1911
2023. 4. 6. 11:45
□ 데이터 베이스 수정(user모델 업그레이드)
- a 의 기능을 b 와 같이 사용하고 싶을때 AbstractUser 사용
- uth_user 모델을 바꾸었다고 알려주기
- (AUTH_USER_MODEL)을 user앱에 작성한 UserModel로 사용하는 과정을 알린다
- user 모델 데이터베이스에 적용(python manage.py, makemigrations
python manage.py migrate)
#user/model.py
from django.contrib.auth.models import AbstractUser
class UserModel(AbstractUser):
class Meta:
db_table = "my_user" # 여기는 테이블 이름
bio = models.TextField(max_length=500, blank=True
# mypage/settings.py
AUTH_USER_MODEL = 'user.UserModel'
□ 회원가입 수정하기
- 장고는 AUTH_USER_MODEL = 'user.UserModel' 을 기본 모델로 인식한다
- 장고가 작성 해 놓은 기능이 자동으로 적용이 되어서 사용자의 비밀번호가 암호화 되어 저장이 된다.
# user/views.py 가장 상단에 아래
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수
#sign_up_view , user/views.py 아래와 같이 변경해주기
if password != password2:
return render(request, 'user/signup.html')
else:
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
else:
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
□ 로그인 수정하기
# user/views.py
from django.contrib import auth # 사용자 auth 기능 비밀번호 체크, 로그인 기능 해결
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기 변경
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)# 변경
return HttpResponse("로그인 성공")
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
return render(request, 'user/signin.html')
□ 로그인 후 페이지 이동
- 로그인 후에 이동할 수 있는 페이지 만들기
- home.html을 연결 할 url과 view를 연결(밑에 코드 입력!)
- user = request.user.is_authenticated 사용자가 로그인 했는지 검사 해주는 기능
- tweet앱에 urls.py 를 만들어서 사용 할 url들을 넣어주기
- 위와 마찬가지로 Django 한테 알려줘야한다. mypage(내가 생성한) 코드 입력
- http://127.0.0.1:8000/tweet url 접속 하게 해주기 return redirect('/') 사용

# tweet/views.py
from django.shortcuts import render, redirect
# Create your views here.
def home(request):
user = request.user.is_authenticated # 사용자가 인증을 받았는지 (로그인이 되어있는지)
if user:
return redirect('/tweet')
else:
return redirect('/sign-in')
def tweet(request):
if request.method == 'GET':
return render(request, 'tweet/home.html')
# tweet/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 127.0.0.1:8000 과 views.py 폴더의 home 함수 연결
path('tweet/', views.tweet, name='tweet') # 127.0.0.1:8000/tweet 과 views.py 폴더의 tweet 함수 연결
]
# mypage/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('user.urls')),
path('', include('tweet.urls'))# 이것만 변경..!
]
#user/view.py
return HttpResponse("로그인 성공") # 변경해주기
return redirect('/')# 위에 코드 대신 이걸사용
HttpResponse 때문에 페이지가 보이지않는다.