Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session、form表单及注册实现)
一、状态保持 session
状态保持
#1、http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
#2、客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端储存与会话有关的数据
#3、储存方式包括cookie、session,会话一般指session
#4、使用cookie,所有数据存储在客户端,注意不要存储敏感数据
#5、是由session方式,所有数据存储在服务器端,在客户端cookie中存储session_id
#6、状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据 #注意:不同请求者之间不会共享这个数据,与请求者一一对应

使用session
#启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象 -get(key,default=None) #根据键获取会话的值
-clear() #清除所有会话
-flush() #删除当前的会话数据并删除会话的cookie
-del request.session['member_id']- #删除
会话过期时间
#1、代码中配置
#set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
#如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
#如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期 #2、配置文件settings里面配置
#是否关闭浏览器使得session过期,默认为False
SESSION_EXPIRY_AT_BROWSER_CLOSE = False #是否每次请求都保存session,默认修改之后保存
SESSION_SAVE_EVERY_REQUEST = False #session的cookie失效时间,默认为2周
SESSION_COOKIE_AGE = 1209600
from django.shortcuts import render,redirect,reverse # Create your views here. def home(request):
'''
主页
'''
username = request.session.get('username','未登录') #在登录的时候设置了session,这里就用session来获取用户信息
return render(request,'test22/home.html',
context={'username':username}) def login_test(request):
'''
登录页
'''
if request.method == 'GET':
return render(request,'test22/login.html')
elif request.method == 'POST':
username = request.POST.get('username') #获取POST中的username
request.session['username'] = username #session是一个字典对象,直接传值便可以存入数据
request.session.set_expiry(0) #set_expiry(value)表示设置会话的过期时间;如果没有指定,默认为两星期后过期
#如果value是一个整数,则回家整数秒后过期;如果value是一个imedelta对象,会话将会在当前时间加上这个指定的日期/时间过期
#如果value是0,那么用户会话的cookie将会在用户的浏览器关闭时过期;如果value为None,那么会话永不过期
return redirect(reverse('test22_home')) def logout(request):
'''
退出
'''
request.session.flush()
return redirect(reverse('test22_home'))
二、form表单及注册实现

form表单的引用
#登录页面和注册页面都会用form表单来提交数据 #当数据提交到后台去,都需要在视图函数中去验证数据的合法性 #django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性,还可以用来生成html代码(生成代码功能基本不用)
关于django form表单的使用
#1、创建一个forms.py的文件,放到指定的app中,然后在里面写表单 #2、表单是通过类实现的,继承自formsForm,然后在里面定义要验证的字段 #3、在表单中,创建字段和模型是一模一样的,但是没有null=True或者blank=True等这几种参数了,有的参数是required=True/False #4、使用is_valid()方法可以验证用户提交的数据是否合法,而且HTML表单元素的name必须和django中的表单的name保持一致,否则匹配不到 #5、is_bound属性 用来表示form是否绑定了数据,如果绑定了,则返回True,否则返回False #6、cleaned_data 这个实在is_vaild()返回True的时候,保存用户提交上来的数据
form.py
from django import forms class AddForm(forms.Form):
first = forms.IntegerField()
second = forms.IntegerField() class RegisterForm(forms.Form):
username = forms.CharField(max_length=20,min_length=6)
password = forms.CharField(max_length=10,min_length=6,
widget=forms.PasswordInput( #width、attrs、error_message是前端的内容
attrs={'placeholder':'请输入密码'}
),
error_messages={'min_length':'密码长度小于6',
'max_length':'密码长度大于10'}
)
password_repeat = forms.CharField(widget=forms.PasswordInput())
email = forms.EmailField() class LoginForm(forms.Form):
username = forms.CharField(max_length=20,min_length=6)
password = forms.CharField(max_length=10,min_length=6)
view.py
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
from django.contrib.auth.hashers import make_password,check_password
# Create your views here. from .forms import AddForm,RegisterForm,LoginForm
from .models import User
def add_test(request):
if request.method == 'GET':
form = AddForm()
return render(request,'test22/add_test.html',
context={'form':form, #这就是模型渲染到模板中
})
elif request.method == 'POST':
form = AddForm(request.POST) #把POST的值放到AddForm类当中去,然后在赋值给form,就是拿到POST的值
if form.is_valid(): #判断是否合法
first = form.cleaned_data.get('first') #通过cleaned_data方法获取,这也是一个字典类型的,可以用get拿到数据
second = form.cleaned_data.get('second')
return HttpResponse(first*second) def register(request):
'''
注册页
'''
if request.method == 'GET':
form = RegisterForm()
return render(request,'test22/register.html',
context={'form':form})
elif request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
password_repeat = form.cleaned_data.get('password_repeat')
email = form.cleaned_data.get('email')
if password == password_repeat:
password = make_password(password) #给用户输入的密码加密
User.objects.create(username = username,
password = password,
email = email)
return render(request,'test22/login.html')
else:
return HttpResponse('注册失败')
else:
return HttpResponse('注册失败') def login(requset):
'''
登录页
'''
if requset.method == 'GET':
form = LoginForm()
return render(requset,'test22/login.html',
context={'form':form})
elif requset.method == 'POST':
form = LoginForm(requset.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = User.objects.filter(username=username) #查询数据库中名字为username的数据
if user:#如果存在
if check_password(password,user[0].password): #验证POST中的密码和数据库中的密码是否相同,相同,session;不同,返回登录页面
requset.session['username'] = username
return render(requset,'test22/home.html')
else:
redirect(reverse('login'))
else:
return redirect(reverse('login'))
else:
return redirect(reverse('login'))
Django 11 form表单(状态保持session、form表单及注册实现)的更多相关文章
- Django——11 状态保持 form表单 登陆注册样例
Django 状态保持 用户状态例子 实现注册登陆实例 django forms 表单的使用 注册功能 登陆功能 状态保持cookie和session 1.http协议是无状态的:每次请求都是一次 ...
- django 表单系统 之 forms.Form
继承forms.Form实现django表单系统 参考: https://www.cnblogs.com/zongfa/p/7709639.html https://www.cnblogs.com/c ...
- (二)无状态的web应用(单py的Django占位图片服务器)
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 阅读本文建议了解Django框架的基本工作流程,了解WSGI应用,如果对以上不是很清楚,建议结 ...
- java web学习总结(十三) -------------------使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- [Java拾遗五]使用Session防止表单重复提交
申明:此文章属于转载, 转自博客: http://www.cnblogs.com/xdp-gacl/p/3859416.html在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没 ...
- JavaWeb学习总结(十三)——使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...
- Django之路:QuerySet API,后台和表单
一.Django QuerySet API Django模型中我们学习了一些基本的创建和查询.这里专门讲以下数据库接口相关的接口(QuerySet API),当然你也可以选择暂时跳过这节.如果以后用到 ...
- JavaWeb学习 (十二)————使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
随机推荐
- LAMP 2.4 Apache访问控制
通过查看日志发现有个IP 恶意攻击你的网址,可以控制这个IP的访问. 打开主配置文件复制模板. vim /usr/local/apache2/conf/httpd.conf 搜索 /Order 复制 ...
- windows安装和配置JDK
安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量 系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) ...
- rm 删除文件或目录
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 注意:使用rm命令要格外小心.因为一旦 ...
- CSS布局奇淫巧计之-强大的负边距
css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...
- clearfix的用法(转)
clearfix的用法 (2013-12-31 10:41:24) 标签: clearfix 清除浮动 clearboth height zoom 分类: 网页制作 如果有一个DIV作为外部容器,内部 ...
- Elasticsearch - 环境准备
Precondition: Ubuntu OS 环境准备: 1. JAVA_HOME 1.1 Download the jdk8 (jdk-8u25-linux-x64.tar.gz) from of ...
- [gist]Android SHA-1
参考:http://stackoverflow.com/questions/5980658/how-to-sha1-hash-a-string-in-android 代码:
- 第二篇:MySQL库相关操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...
- Git 之 .gitignore 与版本
.gitignore 以斜杠“/”开头表示目录: 以星号“*”通配多个字符: 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表: 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录: 版 ...
- ubuntu 15.04默认root用户登陆
1:给root用户设置密码 sudo passwd root 2:修改/etc/lightdm/lightdm.conf [SeatDefaults]autologin-guest=falseauto ...