일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 멋쟁이사자처럼대학
- IT동아리
- 파이썬 크롤링
- 멋사 합격
- 디스코드봇
- 백엔드
- 깃허브
- django
- 파이썬
- 멋쟁이사자처럼11기
- 멋사 면접
- 알림봇
- 코딩동아리
- 멋쟁이사자처럼
- discord
- 멋쟁이사자처럼 서류
- 멋사
- 멋사 서류평가
- 멋사12
- API
- 멋사 서류
- 멋사10기
- 웹동아리
- 기사 제목 크롤링
- 멋사 10기
- 크롤링
- 멋쟁이 사자처럼
- 멋사11기
- 멋쟁이사자처럼10기
- ㅏㄴ
- Today
- Total
ACHO.pk devlog
[멋쟁이사저처럼10기] Django 블로그 만들기(로그인/로그아웃) 본문
[블로그 만들기] 라는 글이 계속해서 이어지고 있는 만큼 시작 전에 초기설정 먼저 알아보자..
<초기 설정>
1. myproject 생성
2. blogapp 생성 + 등록
3. templates 폴더 생성 + index.html 생성 + url 등록(함수 실행시키기 위함) + def함수 등록(html과 연결시키기 위함)
그리고 각 주제(글 생성이나 댓글 .. 등)에서 따로 코드를 더 적은 admin.py, settings.py. 새롭게 만든 models.py 등은 해당 게시글에서 확인하면 되겠다.
로그인 창 띄우기
새 글을 생성할 수 있는 사람에 제한을 두기 위해서 로그인/로그아웃 기능이 필요하다.
일단, 'accounts'의 이름을 가진 어플리케이션을 만들어주자. settings.py에 앱등록을 해야하는 것도 잊으면 안된다.
python manage.py startapp accounts
index.html(웹사이트 기본 화면) 에 로그인 url이 실행되도록 한다.
<a href = "{% url 'login' %}">로그인</a>
urls.py
from blogapp import views
from accounts import views as accounts_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
#로그인
path('login/', accounts_views.login, name='login'),
]
views.py( accounts 어플리케이션 폴더 )
from django.shortcuts import render
def login(request):
#POST 요청이 들어오면 로그인 처리를 해줌
if request.method == 'POST':
pass
#GET 요청이 들어오면 login form을 담고 있는
#login.html을 띄워주는 역할을 함
else:
return render(request,'login.html')
acounts 어플리케이션 폴더 안에 templates 폴더를 만든 후, 'login.html'를 만들어준다.
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
username : <input type='text' name="username">
<br>
password : <input type='password' name="password">
<br>
<input type ="submit" value="로그인">
</form>
로그인 수행하기
로그인 버튼을 클릭(= POST 요청을 보냄)
views.py
- username과 password을 파이썬 변수에 담아줘야한다.
- django에서는 데이터베이스에 저장된 회원인지 아닌지 판단해주는 내장된 기능을 제공한다. auth 안에 여러 메서드를 이용할 수 있다. 로그인, 로그아웃 기능도 수행할 수 있다.
- authenticate 메서드는 username과 password가 실제로 데이터베이스에 존재하는지 userid와 pw로 확인한다.
- django db에 존재하는 회원이라면 그 user 객체를 반환하고, 그렇지 않으면 NONE를 반환한다.
- 우리가 만든 관리자(admin) 계정에 id와 password는 django가 내장하고 있는 User 객체가 관리하고 있다.
from django.shortcuts import render,redirect
from django.contrib import auth
from django.contrib.auth.models import User
def login(request):
#POST 요청이 들어오면 로그인 처리를 해줌
if request.method == 'POST':
userid = request.POST['username']
pw = request.POST['password']
user = auth.authenticate(request, username=userid, password=pw)
if user is not None:
auth.login(request, user)
return redirect('home')
else:
return render(request, 'bad_login.html')
#GET 요청이 들어오면 login form을 담고 있는
#login.html을 띄워주는 역할을 함
else:
return render(request,'login.html')
로그인 했을 때 아이디나 비번이 다를경우 'bad_login.html'로 이동하게 했는데, 이는 다른 'html'로 대체해도 된다.
index.html
{% if user.is_authenticated %}
안녕하세요, {{ user.username }}님!
{% else %}
아직 로그인이 되지 않았습니다
{% endif %}
<br>
<a href = "{% url 'login' %}">로그인</a>
로그인이 정상적으로 수행되는지 확인하기 위해 admin 계정을 새로 만들어보자.
python manage.py createsuperuser
로그인에 성공할시에 admin 계정의 Username이 뜨는 것을 확인할 수 있다.
옳지 않은 아이디나 비번을 입력할 시, 로그인 실패라는 url로 이동하게 된다.
로그인한 사람만 '새 글 작성' 가능 + 로그아웃 기능
index.html
{% if user.is_authenticated %}
안녕하세요, {{ user.username }}님!<br>
<a href = "{% url 'logout' %}">로그아웃</a>
{% else %}
아직 로그인이 되지 않았습니다
<a href = "{% url 'login' %}">로그인</a>
{% endif %}
<br>
{% if user.is_authenticated %}
<a href="{% url 'modelform' %}">새 글 작성</a>
{% endif %}
urls.py
from accounts import views as accounts_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
#로그아웃
path('logout/', accounts_views.logout, name='logout'),
]
views.py
def logout(request):
auth.logout(request)
return redirect('home')
로그인에 성공했을 때 자동으로 redirect
하는 곳을 정해줄 수 있음
settings.py
LOGIN_REDIRECT_URL = '/'
# Internationalization
# https://docs.djangoproject.com/en/4.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
'멋쟁이사자처럼' 카테고리의 다른 글
[멋쟁이사저처럼10기] Django 개발자 대나무숲 프로젝트(댓글 구현하기) (0) | 2022.07.09 |
---|---|
[멋쟁이사저처럼10기] Django 개발자 대나무숲 프로젝트(익명 게시판) (0) | 2022.07.08 |
[멋쟁이사저처럼10기] Django 블로그 만들기(댓글 구현) (0) | 2022.07.07 |
[멋쟁이사저처럼10기] Django 블로그 만들기(파일 업로드) (0) | 2022.07.06 |
[멋쟁이사저처럼10기] Django 블로그 만들기(글 목록 띄우기, url 계층) (0) | 2022.07.06 |