주뇽's 저장소
6. AccountApp - Sign Up ⇒ Create View 본문
728x90
반응형
PreView
Sign Up ⇒ Create View
View Info ⇒ Read View(Detail View)
Change Info ⇒ Update View
Quit ⇒ Delete View
Authentication
Sign Up → Create view
Sign Up → Create view
- accountapp/views.py 코드 수정
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
**from django.urls import reverse, reverse_lazy
from django.views.generic import CreateView
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm**
from accountapp.models import HelloWorld
# Create your views here.
def hello_world(request):
if request.method == "POST":
temp = request.POST.get("account_input")
newModel = HelloWorld()
newModel.text = temp
newModel.save()
HelloWorldList = HelloWorld.objects.all()
return HttpResponseRedirect(reverse("accountapp:hello_world"))
else:
HelloWorldList = HelloWorld.objects.all()
return render(request, "accountapp/hello_world.html", context={"HelloWorldList" : HelloWorldList})
**class AccountCreateView(CreateView): #-- 장고에서 제공해주는 CreateView 상송
model = User #-- 장고에서 제공해주는 user에대한 model import
form_class = UserCreationForm #-- 회원가입을 위한 장고에서 제공해주는 form
success_url = reverse_lazy("accountapp:hello_world") #-- 성공한 경우 되돌아갈 페이지 지정 함수형 view -> reverse
template_name = 'accountapp/create.html'**
- accountapp/urls.py 코드 수정
from django.urls import path
from .views import hello_world
**from .views import AccountCreateView**
app_name = "accountapp"
urlpatterns = [
path('hello_world/', hello_world, name = "hello_world"),
**path('create/', AccountCreateView.as_view(), name = "create")**
]
- accountapp/templates/accountapp/cretate.html 파일 생성
{% extends 'base.html' %}
{%block content%}
<div style="text-align:center">
<form action = "{%url 'accountapp:create'%}", method="post">
{%csrf_token%}
{{ form }}
<input type="submit", class="btn btn-primary">
</form>
</div>
{% endblock %}
- username과 pw, pw확인을 입력하여 회원가입
Sign In, Sign Out(Login View, Logout View)
Sign In, Sign Out(Login View, Logout View)
장고에서 기본적으로 제공해주는 Login View, Logout View를 이용
- accountapp/urls.py에서 view 바로 연결
from django.urls import path
from .views import hello_world
from .views import AccountCreateView
**from django.contrib.auth.views import LoginView, LogoutView**
app_name = "accountapp"
urlpatterns = [
path('hello_world/', hello_world, name = "hello_world"),
**path('login/', LoginView.as_view(template_name = "accountapp/login.html"), name = "login"),
path('logout/', LogoutView.as_view(), name = "logout"),**
path('create/', AccountCreateView.as_view(), name = "create")
]
- accountapp/templates/accountapp/login.html 파일 생성
{% extends 'base.html' %}
{%block content%}
<div style="text-align:center">
<div>
<h4>Login</h4>
</div>
<div>
<form action = "", method="post">
{%csrf_token%}
{{ form }}
<input type="submit", class="btn btn-primary">
</form>
</div>
</div>
{% endblock %}
- 로그인 후 원하는 페이지로 Redirect하기 위한 설정
- next가 가장 먼저 실행 없을 경우 Login_REDIRECT_URL → Default순으로 실행된다.
- templates/header.html 코드 수정해서 nexr 설정
<div class="full_stack_project_header_navn">
<div>
<h1 class="full_stack_project_logo">Full Stack Project</h1>
</div>
<div>
<span> nav1 </span>
<span> nav2 </span>
<span> nav3 </span>
{%if not user.is_authenticated%}
**<a href="{%url 'accountapp:login'%}?next={{request.path}}">**
<span> Login </span>
</a>
{% else %}
**<a href="{%url 'accountapp:logout'%}?next={{request.path}}">**
<span> Logout </span>
</a>
{% endif %}
</div>
</div>
- fullstackproject/settings.py에서 LOGIN_REDIRECT_URL 설정
**LOGIN_REDIRECT_URL = reverse_lazy("accountapp:hello_world")
LOGOUT_REDIRECT_URL = reverse_lazy("accountapp:login")**
이전에 생성했던 아이디로 로그인
- 로그인 페이지
)
- 로그아웃 페이지
Form 스타일링(부트스트랩)
pip install django-bootstrap4
- fullstackproject/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accountapp',
'bootstrap4',
]
- accountapp/templates/accountapp/login.html에 부트스트랩 폼 적용
{% extends 'base.html' %}
{% load bootstrap4 %}
{%block content%}
<div style="text-align:center; max-width: 500px; margin: 4rem auto">
<div>
<h4>Login</h4>
</div>
<div>
<form action = "", method="post">
{%csrf_token%}
<!-- {{ form }} -->
**{%bootstrap_form form%}**
<input type="submit", class="btn btn-dark rounded-pill col-6 mt-3">
</form>
</div>
</div>
{% endblock %}
- 회원가입 form도 변경
{% extends 'base.html' %}
{% load bootstrap4 %}
{%block content%}
<div style="text-align:center; max-width: 500px; margin: 4rem auto">
<div class="mb-4">
<h4>회원가입</h4>
</div>
<form action = "{%url 'accountapp:create'%}", method="post">
{%csrf_token%}
<!-- {{ form }} -->
{%bootstrap_form form%}
<input type="submit", class="btn btn-dark rounded-pill col-6 mt-3">
</form>
</div>
{% endblock %}
폰트 수정
- static/fonts폴더 생성 후 폰트 삽입
- templates/head.html에서 font 불러오기
{% load static %}
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Full Stack Project With Django</title>
<!-- 부트스트랩 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">
<!-- 구글 폰트 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Gowun+Batang&family=Indie+Flower&family=Maven+Pro&family=Nanum+Pen+Script&family=Noto+Sans+KR:wght@300;700&family=Unna&display=swap" rel="stylesheet">
<!-- CSS Link -->
<link rel = "stylesheet" type = "text/css" href="{% static 'base.css' %}">
**<style>
@font-face {
font-family: '나눔손글씨 진주 박경아체';
src: local('나눔손글씨 진주 박경아체'),
url("{%static 'fonts/나눔손글씨 진주 박경아체.ttf'%}") format("opentype");
}
@font-face {
font-family: '나눔손글씨 칼국수';
src: local('나눔손글씨 칼국수'),
url("{%static 'fonts/나눔손글씨 칼국수.ttf'%}") format("opentype");
}
</style>**
</head>
- templates/base.html에서 기본 폰트 설정
<!DOCTYPE html>
<html lang="ko">
{%include 'head.html'%}
**<body style="font-family: '나눔손글씨 진주 박경아체' ;">**
{%include 'header.html'%}
<hr>
{%block content%}
{%endblock%}
<hr>
{%include 'footer.html'%}
</body>
</html>
'웹개발 > Django' 카테고리의 다른 글
5. DB 연동 (0) | 2023.08.25 |
---|---|
4. CSS 개념 및 설정 (0) | 2023.08.19 |
3. Style, 구글 폰트를 통해 Header, Footer 꾸미기 (0) | 2023.08.19 |