기초다지기/기초 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 때문에 페이지가 보이지않는다.