网站设计标题,wordpress 主题 api,建设网站是什么科目,在什么网站可以做硬件项目使用Django自带的用户认证系统编写认证、登录、注销基本功能 功能#xff1a; 使用Django默认的User表 1#xff09;注册 判断是否已存在此用户#xff0c;存在的话提示报错“用户已存在”#xff1b; 判断两次输入的密码是否一致#xff0c;不一致的话提示报错“密码不一… 使用Django自带的用户认证系统编写认证、登录、注销基本功能 功能 使用Django默认的User表 1注册 判断是否已存在此用户存在的话提示报错“用户已存在” 判断两次输入的密码是否一致不一致的话提示报错“密码不一致”。 实现报错提示的方式有两种 第一种在form表单中使用clean_函数进行定义判断函数在views中进行的is_valid判断时进行校验并获取错误传送到模板中显示在前端。 第二种直接在views视图中判断 2登录 登录成功跳转到主页index 登录不成功初始化登录页面 跳转到注册页面。 3主页 直接访问主页用户没有登录的话跳转到登录页面 用户已登录显示用户登录名。 4注销 清除登录的session退出登录 项目目录结构 mysite/setting设置 注册应用 更改时区和语言设置 from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
urlpatterns [path(admin/, admin.site.urls),url(r^djauth/,include(djauth.urls,namespacedjauth)),] mysite/urls.py from django.urls import re_path
from . import views
app_namedjauth
urlpatterns[re_path(r^$,views.index),re_path(rregister/$,views.register,nameregister),re_path(rlogin/$,views.login_view,namelogin),re_path(rlogout/$,views.logout_view,namelogout),
] djauth/urls.py from django import forms
from django.contrib.auth.models import User
class login_form(forms.Form):usernameforms.CharField(max_length30)passwordforms.CharField(widgetforms.PasswordInput)class register_form(forms.Form):usernameforms.CharField(max_length30,label姓名)emailforms.EmailField()passwordforms.CharField(widgetforms.PasswordInput,min_length3,label密码)password_reforms.CharField(widgetforms.PasswordInput,min_length3,label确认密码)#第一种报错方式使用form表单views中捕捉##clean_字段,,在视图views使用is_valid时自动严重表单字段的有效性# def clean_username(self):# cdself.cleaned_data# userUser.objects.filter(usernamecd[username])# if user:# raise forms.ValidationError(用户已存在)# return cd[username]# def clean_password_re(self):# cdself.cleaned_data# if cd[password]!cd[password_re]:# raise forms.ValidationError(密码不一致)# return cd[password_re] djauth/forms.py from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
import time
from django.contrib import auth
from django.contrib.auth.models import User
from . import forms#访问index首页前先判断用户是否登录没有登录的话需要跳转到login登录
#实现方式一判断request.user.is_authenticated
# def index(request):
# #验证用户是否登录成功
# if request.user.is_authenticated:
# # request.user.username获取登录用户名
# print(UserAuth:,request.user.username)
# return render(request,djauth/index.html)
# else:
# return redirect(/djauth/login/)
#实现方式二使用login_required装饰器
#login_required装饰器会先判断用户是否登录如果没有登录则自动跳转到login_url路径
#默认跳转路径是/accounts/login/并在登录后跳转到原先的请求路径如请求路径/djauth、
#默认跳转路径为/accounts/login/?next/djauth/#示例
#没有login_url
#[13/Dec/2018 14:40:16] GET /djauth/ HTTP/1.1 302 0
#302跳转
#[13/Dec/2018 14:40:16] GET /accounts/login/?next/djauth/ HTTP/1.1
#指定loging_url
#[13/Dec/2018 14:41:31] GET /djauth/ HTTP/1.1 302 0
#[13/Dec/2018 14:41:32] GET /djauth/login/?next/djauth/ HTTP/1.1 200 725
#[13/Dec/2018 14:42:35] POST /djauth/login/?next/djauth/ HTTP/1.1 302 0
#302登录成功后自动跳转
#[13/Dec/2018 14:42:35] GET /djauth/ HTTP/1.1 200 263
from django.contrib.auth.decorators import login_required
login_required(login_url/djauth/login/)
def index(request):return render(request,djauth/index.html)def register(request):errors[]if request.methodPOST:#初始化表单RegisterFormforms.register_form(request.POST)#验证表单的输入是否有效格式是否正确if RegisterForm.is_valid():# 第一种报错方式捕捉form表单的报错##获取表单有效的值# RegisterRegisterForm.cleaned_data##创建用户# userUser.objects.create_user(usernameRegister[username],# passwordRegister[password],# emailRegister[email]# )##保存# user.save()# return HttpResponse(注册成功)##获取form表单clean函数中raise的错误#errorsRegisterForm.errors#第二种报错方式直接在views中判断RegisterRegisterForm.cleaned_data#判断用户是否存在user_existUser.objects.filter(usernameRegister[username]).exists()if user_exist:errors.append(用户已存在)if Register[password]!Register[password_re]:errors.append(密码不一致)else:userUser.objects.create_user(usernameRegister[username],passwordRegister[password],emailRegister[email])user.save()return HttpResponse(注册成功)#初始化表单RegisterFormforms.register_form()return render(request,djauth/register.html,{RegisterForm:RegisterForm,errors:errors})def login_view(request):error[]curtimetime.strftime(%Y-%m-%d %H:%M:%S,time.localtime())if request.methodPOST:LoginFormforms.login_form(request.POST)if LoginForm.is_valid():AccountLoginForm.cleaned_data#验证User表中用户的账号密码是否正确验证通过返回用户名不通过返回Noneuserauth.authenticate(usernameAccount[username],passwordAccount[password])if user is not None:#判断账户是否活跃if user.is_active:auth.login(request,user)return redirect(/djauth/)else:error.append(用户无效)else:error.append(账号或密码错误)else:LoginFormforms.login_form()return render(request,djauth/login.html,{LoginForm:LoginForm,curtime:curtime,error:error})def logout_view(request):#清除session登出auth.logout(request)return redirect(/djauth/login) djauth/views.py !DOCTYPE html
html langen
headmeta charsetUTF-8title{% block title %}{% endblock %}/title
/head
body
{% block content %}{% endblock %}
/body
/html djauth/templates/djauth/base.html !DOCTYPE html
html langen
headmeta charsetUTF-8title首页/title
/head
body
h1首页/h1
!--获取登录用户名:request.user.username或user.username--
{% if request.user.is_authenticated %}{{ user.username }}
{% endif %}pa href{% url djauth:logout %}退出/a/p
/body
/html djauth/templates/djauth/index.html {% extends djauth/base.html %}{% block title %}
Login Page
{% endblock %}{% block content %}
h1Login Page/h1{% if error %}{{ error }}{% endif %}p时间:{{ curtime }}/pform action methodpost{% csrf_token %}{{ LoginForm.as_p }}input typesubmit valueLogin/formp没有账号点击a href{% url djauth:register %}注册/a/p
{% endblock %} djauth/templates/djauth/login.html {% extends djauth/base.html %}
{% block title %}
Register Page
{% endblock %}{% block content %}
h1Register Page/h1{% if errors %}p{{ errors }}/p{% endif %}form action methodpost{% csrf_token %}{% for foo in RegisterForm %}p{{ foo.label_tag }}{{ foo }} {{ errors.foo }}/p{% endfor %}input typesubmit value注册/form
{% endblock %} djauth/templates/djauth/register.html 转载于:https://www.cnblogs.com/kikkiking/p/10113154.html