흰 스타렉스에서 내가 내리지

회원가입, 로그인, 로그아웃 본문

Django

회원가입, 로그인, 로그아웃

주씨. 2022. 6. 8. 18:02
728x90

회원 관리를 위해서는 새로운 앱을 하나 만들어 줘야 한다

그 앱 상에서 로그인, 로그아웃, 회원가입을 관리해 주는게 효율적이다

 

앱 생성

python3 manage.py startapp accounts

 

 

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blogapp',
    'accounts'
]

 

 

 

로그인

 

urls.py

from accounts import views as accounts_views

...
...

urlpatterns = [
	...
	...
	...
	path('login', accounts_views.login, name='login'),
]

 

 

accounts/views.py

def login(request):
    if request.method == 'POST':
        pass
    else:
        return render(request, 'login.html')

 

 

accounts/templates/login.html

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

 

 

장고는 기본적으로 User를 관리할 수 있게 해준다.

views.py

from django.shortcuts import redirect, render
from django.contrib import auth
from django.contrib.auth.models import User

def login(request):
    if request.method == 'POST':
        userid = request.POST['username']
        userpw = request.POST['password']
        
        user = auth.authenticate(request, username=userid, password=userpw)
        if user is not None:
            auth.login(request, user)
            return redirect('home')
        else:
            return render(request, 'login.html')
        
    else:
        return render(request, 'login.html')

 

 

 

index.html

{% if user.is_authenticated %}
  안녕하세요,
  {{ user.username }}
  님!!
{% else %}
  <a href="{% url 'login' %} ">로그인</a>
{% endif %}

<h1>짱구야 놀자</h1>

...
...

 

 

로그인하면 리다이렉트 할 곳을 settings.py에서 지정해줄 수도 있다.

LOGIN_REDIRECT_URL = "/"

 

 

로그아웃

 

urls.py

    path('login', accounts_views.login, name='login'),
    path('logout', accounts_views.logout, name='logout'),

 

 

views.py

def logout(request):
    auth.logout(request)
    return redirect('home')

 

 

 

 

회원가입

urls.py

path('signup', accounts_views.signup, name='signup'),

 

 

 

signup.html 생성

<form action="{% url 'signup' %}" method='POST'>
  {% csrf_token %}
  username :
  <input type="text" name="user-id" maxlength="10">
  password :
  <input type="password" name="user-pw">
  <br>
  <input type="submit">
</form>

 

 

views.py

def signup(request):
    if request.method == 'POST':
        user = User()
        user.username = request.POST['user-id']
        user.set_password(request.POST['user-pw'])
        user.save()
        return redirect('home')
    return render(request, 'signup.html')
def signup(request):
    if request.method == 'POST':
        if request.POST['password'] == request.POST['repeat']:
            # 회원가입
            new_user = User.objects.create_user(username=request.POST['username'], password=request.POST['password'])
            
            # 로그인
            auth.login(request, new_user)
            
            # 홈 리다이렉션
            return redirect('home')
    
    return render(request, 'register.html')

 

 

index.html 에 회원가입 앵커 추가

{% if user.is_authenticated %}
  안녕하세요,
  {{ user.username }}
  님!!
  <a href="{% url 'logout' %} ">로그아웃</a>
{% else %}
  <a href="{% url 'login' %} ">로그인</a>
  <a href="{% url 'signup' %} ">회원가입</a>
{% endif %}

<h1>짱구야 놀자</h1>

 

'Django' 카테고리의 다른 글

django에서 민감한 데이터를 숨기는 일반적인 방법  (0) 2022.06.09
pagination  (0) 2022.06.09
댓글  (0) 2022.06.08
사용자가 media 를 업로드 할 수 있도록  (0) 2022.06.08
게시글 detail 페이지 구현  (0) 2022.06.08