结合数据库、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 = {'':'男','':'女','':'保密'}
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">
<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/">修改密码</a>
<a class="btn btn-danger pull-right" href="/logout/">注销</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页面的更多相关文章

  1. django 认证系统--3

    WEB request中的认证 django使用sessions和middleware和reqeust对象联系在一起 它们通过给每一个reqeust请求添加一个request.user属性来代表当前用 ...

  2. Django认证系统并不鸡肋反而很重要

    在使用django-admin startproject创建项目后,Django就默认安装了一个采用session实现的认证系统.这是Django相比于其他框架的一大特点:自带认证系统,开箱即用.有人 ...

  3. Django认证系统auth认证

    使用Django认证系统auth认证 auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 ...

  4. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  5. 自定义Django认证系统的技术方案

    Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...

  6. django 认证系统--2

    使用django的认证系统 User 对象 User是认证系统的核心.典型代表是用户和你的站点进行交互还有限制访问.注册用户等等.django认证框架中,只存在一个User类,像'superuser' ...

  7. django 认证系统--1

    django的认证系统提供认证和授权两种功能 认证系统包括如下部分: 1.Users 2.Permissions 主要是以 YES/NO 的形式反映一个用户是否能够做某事 3.Groups:就是对多个 ...

  8. django认证系统-user对象(创建,改密,认证)

    User对象 User对象是认证系统的核心.它们通常表示与你的站点进行交互的用户,并用于启用限制访问.注册用户信息和关联内容给创建者等.在Django的认证框架中只存在一种类型的用户,因此诸如'sup ...

  9. Django认证系统

    一.cooie与session 1.1 cookie与session cooie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又要保持状态,因此cookie就是在这样的一个场 ...

随机推荐

  1. 自平衡二叉(查找树/搜索树/排序树) binary search tree

    在计算机科学中,AVL树是最先发明的自平衡二叉查找树.AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An alg ...

  2. [提升性选讲] 树形DP进阶:一类非线性的树形DP问题(例题 BZOJ4403 BZOJ3167)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7337179.html 树形DP是一种在树上进行的DP相对比较难的DP题型.由于状态的定义多种多样,因此解法也五 ...

  3. 【转】Microsoft Visio2010 如何画UML 图

    转载:http://sdoq19.blog.163.com/blog/static/1910392122012419103442292/ 1.在Microsoft Office2010中打开Micro ...

  4. 【刷题】BZOJ 3626 [LNOI2014]LCA

    Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. ...

  5. Go 示例测试实现原理剖析

    简介 示例测试相对于单元测试和性能测试来说,其实现机制比较简单.它没有复杂的数据结构,也不需要额外的流程控制,其核心工作原理在于收集测试过程中的打印日志,然后与期望字符串做比较,最后得出是否一致的报告 ...

  6. BZOJ 3787: Gty的文艺妹子序列

    3787: Gty的文艺妹子序列 Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 186  Solved: 58[Submit][Status][Dis ...

  7. 用Gradle命令行编译Android工程

    在Android sdk 目录下的samples/android-21/ 文件夹下,任找一个工程,如果在命令行直接编译 可能会报这种错误:gradle buile.gradle FAILURE: Bu ...

  8. bzoj3839【Pa2013】Działka

    题目描述 平面上有n个不重复的点.每次询问一个边平行坐标轴的矩形内(包含边界)的点组成的凸包的面积.. 输入格式 第一行两个整数k,n(1<=k<=1000000,3<=n<= ...

  9. (转)Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web mod

    背景:在sts中导入web项目,却不能通过sts中的tomcat来加载该服务,并报出如下错误. “Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4 ...

  10. NIN (Network In Network)

    Network In Network 论文Network In Network(Min Lin, ICLR2014). 传统CNN使用的线性滤波器是一种广义线性模型(Generalized linea ...