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表单及注册实现)的更多相关文章

  1. Django——11 状态保持 form表单 登陆注册样例

    Django 状态保持 用户状态例子 实现注册登陆实例 django forms 表单的使用 注册功能 登陆功能   状态保持cookie和session 1.http协议是无状态的:每次请求都是一次 ...

  2. django 表单系统 之 forms.Form

    继承forms.Form实现django表单系统 参考: https://www.cnblogs.com/zongfa/p/7709639.html https://www.cnblogs.com/c ...

  3. (二)无状态的web应用(单py的Django占位图片服务器)

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 阅读本文建议了解Django框架的基本工作流程,了解WSGI应用,如果对以上不是很清楚,建议结 ...

  4. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  5. [Java拾遗五]使用Session防止表单重复提交

    申明:此文章属于转载, 转自博客: http://www.cnblogs.com/xdp-gacl/p/3859416.html在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没 ...

  6. JavaWeb学习总结(十三)——使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  7. (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交

    如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...

  8. Django之路:QuerySet API,后台和表单

    一.Django QuerySet API Django模型中我们学习了一些基本的创建和查询.这里专门讲以下数据库接口相关的接口(QuerySet API),当然你也可以选择暂时跳过这节.如果以后用到 ...

  9. JavaWeb学习 (十二)————使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

随机推荐

  1. Logstash-2.4.1的下载(图文详解)

    第一步:进入Elasticsearch的官网 https://www.elastic.co/ 第二步:点击downloads https://www.elastic.co/downloads 第三步: ...

  2. Java-马士兵设计模式学习笔记-装饰者模式

    Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...

  3. GCD 学习(二)dispatch_queue_create创建Dispatch Queue

    摘录于: http://zhuyanfeng.com/archives/3042 dispatch_queue_create 用于创建用户线程队列.可以创建Serial/Concurrent Disp ...

  4. ZROI2018提高day5t2

    传送门 分析 考场上傻了,写了个树剖还莫名weila...... 实际就是按顺序考虑每个点,然后从他往上找,一边走一边将走过的边染色,如果走到以前染过色的边就停下.对于每一个a[i]的答案就是之前走过 ...

  5. 数据结构_calculator

    问题描述 小 V 发明了一个神奇的整数计算器:给定一个合法的表达式,这个计算器能求出这个表达式的最终答案.表达式可能包含:+:运算符,整数加法.如 1+1=2-:运算符,整数减法.如 1-1=0*:运 ...

  6. Java50道经典习题-程序41 猴子分桃

    题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 ...

  7. jQuery+css实现tab功能

    点击我我会消失 Click me 点击按钮我会消失,再点击我会出现 演示tab tab1 tab2 tab3 [环球时报记者 郭芳] “中国秘密发射新快速响应火箭”,25日,在中国官方媒体报道我国“快 ...

  8. c/c++ 字符编码与标识符

    说明: 对于比较现代的语言来讲字符编码不是个大问题:java就可以使用中文作为变量名称,但对于C/C++来讲却不是这样,由于历史原因,标准和编译器厂商的实现总在不停的变化,相关编码信息到底是如何处理的 ...

  9. Windows Services windows服务如何删除服务

    如何删除服务 一.为何要删除服务: 1.当服务文件丢失时,在服务里还会显示. 2.现在好多都会有服务,你看那个不顺眼就可以把它干掉.前提是不用的软件. 二.使用: 使用sc.exe 这个是window ...

  10. Rabbitmq——实现消费端限流 --NACK重回队列

    如果是高并发下,rabbitmq服务器上收到成千上万条消息,那么当打开消费端时,这些消息必定喷涌而来,导致消费端消费不过来甚至挂掉都有可能. 在非自动确认的模式下,可以采用限流模式,rabbitmq ...