코딩 개발일지

장고 회원가입+로그인/로그아웃 본문

AI 본 교육/AI 5주차

장고 회원가입+로그인/로그아웃

호기호 2023. 9. 5. 21:15

python manage.py startapp user

(user 앱 만들기)

 

저번과 마찬가지로 models.py 에서 User라는 클래스를 만들어준다.

AbstractUser 또는 AbstractBaseUser 를 import해서 사용하는데, 회원가입할 때 사용한다.

 

admin.py에서

from django.contrib.auth.admin import UserAdmin

admin.site.register(User, UserAdmin)

이건 추가 안해줘도 작동하지만(장고가 기본제공), 무조건 해야하는 것이라고 생각하는게 좋다.

나중에 User 데이터를 수정하고 싶을 때, 힘들어진다고 함


본 프로젝트의 settings.py에서

AUTH_USER_MODEL = "user.User"

를 맨 아래에 추가해주고,

INSTALLED_APPS

부분에 user도 추가해준다.

본 프로젝트의 urls.py에서

path('user/', include("user.urls")),

또한 추가해준다.

models.py에서도

class User(AbstractUser):
    profile = models.TextField(null=True, blank=True)

추가해주고, migrate해줘야함.

아마 에러나면서 database 다시 해야할텐데, 이런 이유때문 앱은 user먼저 만드는게 좋다


이제 user앱의

views.py에서 signup이라는 method를 정의해준다.

def signup(request):
    if request.method == "POST":
        username = request.POST["username"]
        password = request.POST["password"]
        User.objects.create_user(username=username, password=password)
        return redirect('/todo/')
    elif request.method == "GET":
        return render(request, "User/signup.html")
    else:
        return HttpResponse('error', status=405)

create_user 대신 create로 생성하면, 비밀번호 노출 위험이 있으므로 꼭 create_user로 만들어주기

 

여기서 나는 회원가입이 안되는 문제에 부딪혔다.

 

자꾸 에러가 났음

이런 에러가 나길래, 구글링을 엄청 했는데, 전혀 찾지 못했고, AbstractUser를 AbstractBaseUser 로 바꿔보기도 하고, 처음부터 다시 다 만들어도 안됌

 

db.sqlite3 파일에서 데이터베이스를 보다가, 혹시 같은 아이디를 등록하려고 해서 오류가 나려나..? 해서 아이디를 바꿔서 만들어보니까 잘 만들어졌음.

하ㅏㅏ.. 몇시간 날렸다.. 계속 user라는 아이디로만 만들다보니 에러가 난것. 나중에 중복된 아이디라고 하는 중복 처리를 꼭 해야겠다는 생각이 들었음


 

로그인도 마찬가지로 urls, views.py, login.html을 작성해주면된다.

user = authenticate(request, username=username, password=password)

authenticate 를 통해 자격성이 있는지를 판단한다

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

login은  user의 id와 pw를 장고의 session에 저장한다

logout을 호출하면 세션에 저장된 데이터는 완전히 지워지며 로그아웃을 실행한다

이 모든것들은 다 장고에서 기본적으로 제공된다. import만 해주면됌

from django.contrib.auth.decorators import login_required
 
@login_required(login_url='/user/login/')

이것도 로그인된 경우만 아래 함수가 실행될 수 있도록 하는 기능이다.

views.py에서 def 함수 바로위에 써주면 된다.

 

이후에는, todo의 index.html 에 회원가입,로그인 버튼을 추가해주면 끝!!!!

button 이나 a태그로 href 해서 user로 보내주면 된다.