python

超轻量级php框架startmvc

Django认证系统实现的web页面实现代码

更新时间:2020-07-23 02:06:01 作者:startmvc
结合数据库、ajax、js、Djangoform表单和认证系统的web页面一:数据模块扩展了Django中的user表

结合数据库、ajax、js、Djangoform表单和认证系统的web页面

一:数据模块

扩展了Django中的user表,增加了自定义的字段


from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
 phone = models.CharField(max_length=11)
 gender = models.CharField(max_length=2)

二:路由系统


from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^register/',views.register),
 url(r'^login/',views.login_view),
 url(r'^home/',views.home),
 url(r'^logout/',views.logout_view),
 url(r'^modify_pwd/',views.modify_pwd),
 url(r'^$',views.home),
]

三:视图系统


from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.contrib.auth import authenticate, login,logout
from app01 import forms
from app01.models import UserInfo
# Create your views here.
def register(request):
 form_obj = forms.Reg_form()
 if request.method == 'POST':
 form_obj = forms.Reg_form(request.POST)
 if form_obj.is_valid():
 info_dic = form_obj.cleaned_data
 sex_dic = {'1':'男','2':'女','3':'保密'}
 info_dic['gender']=sex_dic[info_dic['gender']]

 UserInfo.objects.create_user(
 username=info_dic['username'],
 password = info_dic['pwd'],
 gender=info_dic['gender'],
 phone =info_dic['phone']
 )
 return redirect('/login/')
 return render(request, "register.html",{'form_obj':form_obj})


def login_view(request):
 if request.method == 'POST':
 username = request.POST.get('username')
 pwd = request.POST.get('pwd')
 user = authenticate(username=username, password=pwd)
 if user:
 login(request, user)
 data = {'code':1}
 else:
 data = {'code': 0,'msg':'用户名或密码错误'}
 return JsonResponse(data)
 return render(request, 'login.html')


@login_required
def logout_view(request):
 logout(request)
 return redirect('/login/')

@login_required
def home(request):
 user_id = request.session['_auth_user_id']
 use_obj = request.user
 return render(request,'home.html',{'user':use_obj})

@login_required
def modify_pwd(request):
 if request.method == 'POST':
 old_pwd = request.POST.get('old_pwd')
 pwd = request.POST.get('pwd')
 re_pwd = request.POST.get('re_pwd')
 user_obj = request.user
 if user_obj.check_password(old_pwd):
 if re_pwd == pwd:
 user_obj.set_password(pwd)
 user_obj.save()
 data = {'code': 1}
 else:
 data = {'code': 0, 'msg': '两次输入密码不一致'}
 else:
 data = {'code': 0, 'msg': '原始密码输入错误'}
 return JsonResponse(data)
 return render(request,'modify_pwd.html')

四:form表单


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# Author:YiJun
from django import forms
from app01 import models
from django.forms import widgets
from django.core.exceptions import ValidationError # 导入异常
import re
# Create your views here.
class Reg_form(forms.Form):
 # 用户名表单
 username = forms.CharField(
 min_length=4,
 label="设置用户名",
 error_messages={
 "required": "不能为空",
 "invalid": "格式错误",
 "min_length": "用户名最少4个字符"
 },
 widget=widgets.TextInput(
 attrs={
 'class': "form-control",
 'placeholder': '用户名'
 })
 )
 # 用户密码设置表单
 pwd = forms.CharField(
 min_length=6,
 label="设置密码",
 widget=forms.widgets.PasswordInput(
 attrs={
 'class': 'form-control',
 'placeholder': '密码'},
 render_value=True,
 ),
 error_messages={
 "required": "不能为空",
 "invalid": "格式错误",
 "min_length": "密码至少6位"

 }
 )
 # 用户密码确认表单
 r_pwd = forms.CharField(
 min_length=6,
 label="确认密码",
 widget=forms.widgets.PasswordInput(
 attrs={
 'class': 'form-control',
 'placeholder': '确认密码'},
 render_value=True,
 ),
 error_messages={
 "required": "不能为空",
 "invalid": "格式错误",
 "min_length": "密码至少6位"

 }
 )
 # 用户性别选择表单
 gender = forms.ChoiceField(
 choices=((1, "男"), (2, "女"), (3, "保密")),
 label="性别",
 initial=3,
 widget=forms.widgets.RadioSelect
 )
 # 用户手机号码表单
 phone = forms.CharField(
 label="手机号码",
 max_length=11,
 min_length=11,
 error_messages={
 "required": "不能为空",
 "invalid": "格式错误",
 "min_length": "手机号码至少11位",
 "max_length": "手机号码最多11位",
 },
 widget=widgets.TextInput(attrs={'class': "form-control",'placeholder': '手机号码'})
 )

 def clean_phone(self):
 value = self.cleaned_data['phone']
 expression = re.compile('^1[3589][0-9]{9}')
 if not expression.search(value).group():
 raise ValidationError('请输入正确的手机号码')
 else:
 return value
 def clean_username(self):
 value = self.cleaned_data['username']
 if models.UserInfo.objects.filter(username=value):
 raise ValidationError('用户名已经注册')
 else:
 return value
 def clean(self):
 pwd = self.cleaned_data.get("pwd")
 r_pwd = self.cleaned_data.get("r_pwd")
 if pwd != r_pwd:
 self.add_error("r_pwd", "两次输入的密码不一致!")
 # 两次输入的密码不一致
 raise ValidationError("两次输入的密码不一致!")
 else:
 self.cleaned_data.pop('r_pwd')
 return self.cleaned_data

五:模板系统

注册页面


<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
 content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.min.css" rel="external nofollow" >
 <title>Document</title>
</head>
<body>
<div class="container">
 <div class="row" style="margin-top: 50px">
 <div class="panel panel-primary">

 <div class="panel-heading"><h4>用户详细信息</h4></div>
 <div class="panel-body">

 </div>

 <!-- Table -->
 <div class="table-responsive">
 <table class="table table-bordered">
 <thead>
 <tr>
 <th>#</th>
 <th>用户名</th>
 <th>手机号码</th>
 <th>上次登陆时间</th>
 <th>注册时间</th>
 <th>用户性别</th>
 </tr>
 </thead>
 <tbody>
 <tr>
 <th scope="row">1</th>
 <td>{{ user.username }}</td>
 <td>{{ user.phone }}</td>
 <td>{{ user.last_login|date:'Y-m-d H:i:s' }}</td>
 <td>{{ user.date_joined|date:'Y-m-d H:i:s' }}</td>
 <td>{{ user.gender }}</td>
 </tr>
 </tbody>
 </table>
 </div>
 </div>
 <div style="margin-top: 20px">
 <a class="btn btn-info " href="/modify_pwd/" rel="external nofollow" >修改密码</a>
 <a class="btn btn-danger pull-right" href="/logout/" rel="external nofollow" >注销</a>
 </div>
 </div>
</div>
<script src="/static/jquery-3.3.1.min.js"></script>
<script src="/static/bootstrap-3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
home.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

django 认证系统 web页面