Django가 간단한 블로그 시스템을 만들기(6)---사용자 등록 로그인
앞의 몇 편의 블로그는 문장의 기본적인 첨삭과 수정을 완성하였다.
하나.준비 작업
대부분의 사이트에 대해 말하자면, 사용자 데이터는 비교적 중요한 데이터라고 할 수 있다.한편, 사용자 관리는 사용자 데이터에 대한 삭제와 수정이며 자연히 매우 중요하다.우리는 먼저 사용자 로그인부터 시작합니다.사용자 관리와 글 관리의 기능이 같지 않기 때문에 우리는 사용자 관리를 위한 앱을 하나 더 만들었습니다.
python manager.py startapp userprofile
그리고 이 앱을 설정해 놓으세요.
둘.사용자 로그인
1. 폼 클래스 처리
userprofile 아래forms를 만듭니다.py 파일:
from django import forms
from django.contrib.auth.models import User
#
# Form ModelForm
class UserLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
2. 뷰 함수 작성
userprofile/views.py:
from django.shortcuts import render,HttpResponse,redirect
from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponse
from userprofile.forms import UserLoginForm,UserRegisterForm
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
def user_login(request):
if request.method == 'POST':
user_login_form = UserLoginForm(data=request.POST)
if user_login_form.is_valid():
# .cleaned_data
data = user_login_form.cleaned_data
# 、
# user
user = authenticate(username=data['username'], password=data['password'])
if user:
# session ,
login(request, user)
return redirect("article:article_list")
else:
return HttpResponse(" 。 ~")
else:
return HttpResponse(" ")
elif request.method == 'GET':
user_login_form = UserLoginForm()
context = { 'form': user_login_form }
return render(request, 'userprofile/login.html', context)
else:
return HttpResponse(" GET POST ")
여기에서:
3. 로그인 템플릿 작성
/templates/userprofile/login.html:
% extends "base.html" %} {% load staticfiles %}
{% block title %} {% endblock title %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-12">
<br>
<form method="post" action=".">
{% csrf_token %}
<div class="form-group">
<label for="username"> label>
<input type="text" class="form-control" id="username" name="username">
div>
<div class="form-group">
<label for="password"> label>
<input type="password" class="form-control" id="password" name="password">
div>
<button type="submit" class="btn btn-primary"> button>
form>
div>
div>
div>
{% endblock content %}
tempalates/header를 수정합니다.html, 로그인 버튼 추가:
<ul class="navbar-nav">
...
<li class="nav-item">
<a class="nav-link" href="{% url 'article:article_list' %}"> a>
li>
{% if user.is_authenticated %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ user.username }}
a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#"> a>
div>
li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{% url 'userprofile:login' %}"> a>
li>
{% endif %}
ul>
4. URL 구성
Personal_Blog/urls.py:
path('userprofile/', include('userprofile.url',namespace='userprofile')),
userprofile/url.py:
path('login/',views.user_login,name='login'),
그리고 프로그램을 실행하면 됩니다.
셋.사용자 로그아웃
사용자가 로그인하면 사용자가 로그아웃하는 것이 간단합니다.
1. 보기 함수 작성
userprofile/views.py
# logout
from django.contrib.auth import authenticate, login, logout
...
#
def user_logout(request):
logout(request)
return redirect("article:article_list")
2. URL 설정
userprofile/url.py:
path('logout/',views.user_logout,name='logout'),
3. 헤더 수정
header.html:
# href
<a class="dropdown-item" href='{% url "userprofile:logout" %}'> a>
그리고 프로그램을 실행하면 됩니다.
넷.사용자 등록
1. 레지스트리 클래스
userprofile/forms.py:
#
class UserRegisterForm(forms.ModelForm):
# User
password = forms.CharField()
password2 = forms.CharField()
class Meta:
model = User
fields = ('username','email')
#
def clean_password2(self):
data = self.cleaned_data
if data.get('password') == data.get('password2'):
return data.get('password')
else:
return forms.ValidationError(" ")
2. 뷰 함수 작성
userprofile/views.py:
#
def user_register(request):
if request.method == "POST":
user_register_form = UserRegisterForm(data=request.POST)
if user_register_form.is_valid():
new_user = user_register_form.save(commit=False)
new_user.set_password(user_register_form.cleaned_data['password'])
new_user.save()
#
login(request, new_user)
return redirect("article:article_list")
else:
return HttpResponse(" 。 ~")
elif request.method == "GET":
user_register_form = UserRegisterForm()
context = {'form': user_register_form}
return render(request, 'userprofile/register.html', context)
else:
return HttpResponse(" GET POST ")
3. 템플릿 작성
userprofile/register.html
{% extends "base.html" %} {% load staticfiles %}
{% block title %} {% endblock title %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-12">
<br>
<form method="post" action=".">
{% csrf_token %}
<div class="form-group col-md-4">
<label for="username"> label>
<input type="text" class="form-control" id="username" name="username" required>
div>
<div class="form-group col-md-4">
<label for="email">Emaillabel>
<input type="text" class="form-control" id="email" name="email">
div>
<div class="form-group col-md-4">
<label for="password"> label>
<input type="password" class="form-control" id="password" name="password" required>
div>
<div class="form-group col-md-4">
<label for="password2"> label>
<input type="password" class="form-control" id="password2" name="password2" required>
div>
<button type="submit" class="btn btn-primary"> button>
form>
div>
div>
div>
{% endblock content %}
로그인 페이지에 추가:uerprofile/login.html:
<div class="col-12">
<br>
<h5> ?h5>
<h5> <a href='{% url "userprofile:register" %}'> a> !h5>
<br>
<form method="post" action=".">
...
form>
div>
4. URL 구성
userprofile/url.py:
path('register/',views.user_register,name='register'),
그리고 프로젝트를 실행하면 됩니다.
오.사용자 삭제
사용자의 로그인과 등록에 비해 사용자의 삭제는 더욱 신중해야 한다.
1. 보기 함수 작성
userprofile/views.py:
# @login_required python .
# , .
# , @login_required user_delete() ,
# , '/userprofile/login/'
# , user_delete(),
# id ,
# if
# ,
@login_required(login_url='/userprofile/login/')
def user_delete(request,id):
if request.method == "POST":
user = User.objects.get(id=id)
# ,
if request.user == user:
# ,
logout(request)
user.delete()
return redirect("article:article_list")
else:
return HttpResponse(' ')
else:
return HttpResponse(" post ")
2. 템플릿 작성
헤더를 덮어쓰다.html:
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="#"> a>
<div>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'article:article_create' %}"> a>
li>
<li class="nav-item">
<a class="nav-link" href="{% url 'article:article_list' %}"> a>
li>
{% if user.is_authenticated %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ user.username }}
a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#" onclick="user_delete()"> a>
<a class="dropdown-item" href="{% url 'userprofile:logout' %}"> a>
div>
li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{% url 'userprofile:login' %}"> a>
li>
{% endif %}
ul>
div>
div>
nav>
{% if user.is_authenticated %}
<form
style="display:none;"
id="user_delete"
action="{% url 'userprofile:delete' user.id %}"
method="POST"
>
{% csrf_token %}
<button type="submit"> button>
form>
<script>
function user_delete() {
// layer
layer.open({
title: " ",
content: " ?",
yes: function(index, layero) {
$('form#user_delete button').click();
layer.close(index);
},
})
}
script>
{% endif %}
3. URL 구성
userprofile/url.py:
path('delete/' ,views.user_delete,name='delete'),
그리고 프로젝트를 실행하면 돼요.
맨 마지막에 쓰다
본고는 개인의 학습 노트입니다. 만약에 권리 침해가 있으면 제때에 연락하여 삭제해 주십시오. 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.