Form验证实例
程序目录
models.py
from django.db import models
# Create your models here.
class UserInfo(models.Model):
user=models.CharField(max_length=32)
urls.py
"""s14_day22 URL Configuration
"""
from django.contrib import admin
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$', views.login),
url(r'^index/$', views.index),
url(r'^logout/$', views.logout),
url(r'^test_t/(\d+)$', views.test_t),
url(r'^cache/$', views.cache),
url(r'^signal/$', views.signal),
url(r'^fm/$', views.fm),
]
views.py
from django.shortcuts import render,redirect,HttpResponse
# Create your views here.
def login(request):
if request.method=="GET":
return render(request,'login.html')
elif request.method=="POST":
user=request.POST.get('user')
pwd=request.POST.get('pwd')
if user=="root" and pwd=="123456":
#生成随机字符串
#写到用户浏览器cookie
#保存到session中
#在随机字符串对应的字典中设置相关内容。。。
#session中设置值
request.session['username']=user
request.session['is_login']=True
if request.POST.get('rmb',None)=="1":
#设置session超时时间 不设置 默认超时时间两周
request.session.set_expiry(10) #秒
return redirect("/index/")
else:
return render(request,'login.html')
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt #不需要csrf认证
def index(request):
# 获取当前用户的随机字符串
# 根据随机字符串获取对应的信息
# session中获取值
if request.session.get('is_login',False):
return render(request,'index.html',{'username':request.session['username']})
else:
return HttpResponse('gun')
@csrf_protect #需要csrf认证
def logout(request):
request.session.clear()
return redirect('/login/')
class Foo:
def render(self):
return HttpResponse('ok')
def test_t(request,nid):
# int('111ed')
print("xiaoxima-->没带钱")
# return HttpResponse('ok')
return Foo()
from django.views.decorators.cache import cache_page
@cache_page(10) #10秒钟失效
def cache(request):
import time
ctime=time.time()
return render(request,'cache.html',{'ctime':ctime})
def signal(request):
from app01 import models
obj=models.UserInfo(user='root')
print('end')
obj.save()
obj=models.UserInfo(user='lwb')
obj.save()
obj = models.UserInfo(user='alex')
obj.save()
from sg import pizza_done
pizza_done.send(sender="asasa",toppings=123,size=456)
return HttpResponse('ok')
#################Form#############################
from django import forms
from django.forms import widgets
from django.forms import fields
class FM(forms.Form):
#字段本身自己只做验证
#
user=fields.CharField(
error_messages={'required':'用户名不能为空'},
widget=widgets.Textarea(attrs={'class':'c1'}),
label="用户名:",
# initial='root_xxpp'
)
pwd=fields.CharField(
max_length=12,
min_length=6,
error_messages={'required':'密码不能为空','min_length':'密码长度不能小于6','max_length':'密码长度不能大于12',},
widget=widgets.PasswordInput(attrs={'class':'c2'})
)
email=fields.EmailField(error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'})
f=fields.FileField()
p=fields.FilePathField(path='app01')
city1=fields.MultipleChoiceField(
choices=[(0,'上海'),(1,'广州'),(2,'清远')]
)
city2 = fields.ChoiceField(
choices=[(0, '上海'), (1, '广州'), (2, '清远')]
)
city3 = fields.MultipleChoiceField(
choices=((1,'上海'),(2,'北京'),),
initial=[1,],
widget=widgets.SelectMultiple
)
city4 = fields.CharField(
initial=2,
widget=widgets.RadioSelect(choices=((1,'清远'),(2,'深圳'),))
)
from app01 import models
def fm(request):
if request.method=="GET":
# 从数据库中获取到数据
dic={
"user":"r1",
"pwd":"123123",
'email':"asdf@126.com",
"city1": [1,2],
"city2":1,
}
obj=FM(initial=dic)
return render(request,'fm.html',{'obj':obj})
elif request.method=="POST":
#获取用户所有的数据
#每条数据请求的验证
# 成功:获取所有的正确信息
# 失败:显示错误信息
obj=FM(request.POST)
r1=obj.is_valid()
if r1:
# print(obj.cleaned_data)
models.UserInfo.objects.create(**obj.cleaned_data)
else:
# ErrorDict
# print(obj.errors.as_json())
# print(obj.errors['user'][0])
return render(request,'fm.html',{'obj':obj})
return render(request,'fm.html')
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
{# {% csrf_token %}#}
<input type="text" name="user">
<input type="password" name="pwd">
<input type="checkbox" name="rmb" value="1">10秒免登录
<input type="submit" value="提交">
<input id="btn1" type="button" value="按钮1">
<input id="btn2" type="button" value="按钮2">
</form>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
$(function () {
{# obj=XMLHttpRequest()#}
{# obj.open()#}
{# obj.send()#}
{# #}
$.ajaxSetup({
beforeSend:function (xhr,settings) {
xhr.setRequestHeader('X-CSRFtoken',csrftoken)
}
});
var csrftoken=$.cookie('csrftoken');
$('#btn1').click(function () {
$.ajax({
url:'/login/',
type:"post",
data:{'user':'root','pwd':'123'},
{# headers:{'X-CSRFtoken':csrftoken},#}
success:function (arg) {
}
})
});
$('#btn2').click(function () {
$.ajax({
url:'/login/',
type:"post",
data:{'user':'root','pwd':'123'},
{# headers:{'X-CSRFtoken':csrftoken},#}
success:function (arg) {
}
})
})
})
</script>
</body>
</html>
{#xhr: xml http request对象#}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎登录:{{ username }}--{{ request.session.username }}</h1>
<a href="/logout/">注销</a>
</body>
</html>
m1.py
from django.utils.deprecation import MiddlewareMixin
class Row1(MiddlewareMixin):
def process_request(self,request):
print('王生')
def process_view(self,request,view_func,view_func_args,view_func_kwargs):
print('张欣彤')
def process_response(self,request,response):
print('扛把子')
return response
from django.shortcuts import HttpResponse
class Row2(MiddlewareMixin):
def process_request(self,request):
print('陈毅强')
# return HttpResponse('走')
def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('张需要')
def process_response(self,request,response):
print('侯亚凡')
return response
class Row3(MiddlewareMixin):
def process_request(self,request):
print('刘冬')
def process_view(self,request,view_func,view_func_args,view_func_kwargs):
print('邵琳')
def process_response(self,request,response):
print('连之类')
return response
def process_exception(self,request,exception):
if isinstance(exception,ValueError):
return HttpResponse("出现异常了》。。。")
def process_template_response(self,request,response):
# 如果Views函数返回的对象中,具有render方法
print('----------------')
return response
settings.py
from django.middleware.csrf import CsrfViewMiddleware
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',#process_response 返回时 修改和保存获取到的数据到缓存里
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'Middle.m1.Row1',
# 'Middle.m1.Row2',
# 'Middle.m1.Row3',
'django.middleware.cache.FetchFromCacheMiddleware',#process_request 请求时 获取缓存
]
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
SESSION_SAVE_EVERY_REQUEST = True
# SESSION_ENGINE = 'django.contrib.sessions.backends.db' # session保存到数据库引擎(默认)
# SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # session保存到缓存引擎
# SESSION_CACHE_ALIAS = 'default'
# SESSION_ENGINE = 'django.contrib.sessions.backends.file' # session保存到文件引擎
# SESSION_FILE_PATH = os.path.join(BASE_DIR,'save_session') # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
# SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # session保存到缓存+数据库
# SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # session保存到加密cookie
# CACHES = {
# 'db3': {
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': '127.0.0.1:11211',
# },
#
# 'db1': {
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': 'unix:/tmp/memcached.sock',
# },
#
# 'db2': {
# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
# 'LOCATION': [
# '172.19.26.240:11211',
# '172.19.26.242:11211',
# ]
# }
# }
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': os.path.join(BASE_DIR,'cache')
}
}
cache.html
{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{ ctime }}</h1>
<h1>{{ ctime }}</h1>
{% cache 10 c1 %}
<h1>{{ ctime }}</h1>
{% endcache %}
</body>
</html>
sg.py
from django.core.signals import request_finished
from django.core.signals import request_started
from django.core.signals import got_request_exception
from django.db.models.signals import class_prepared
from django.db.models.signals import pre_init, post_init
from django.db.models.signals import pre_save, post_save
from django.db.models.signals import pre_delete, post_delete
from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate, post_migrate
from django.test.signals import setting_changed
from django.test.signals import template_rendered
from django.db.backends.signals import connection_created
def f1(sender, **kwargs):
print("f1oo_callback")
# print(sender, kwargs)
# def f2(sender, **kwargs):
# print("f2oo_callback")
# print(sender, kwargs)
pre_init.connect(f1)
# pre_init.connect(f2)
# xxoo.connect(callback)
# xxoo指上述导入的内容
import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
def callback(sender, **kwargs):
print("callback")
print(sender, kwargs)
pizza_done.connect(callback)
fm.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/fm/" method="post">
{% csrf_token %}
<p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
<p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
<p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
<p>{{ obj.f }}{{ obj.errors.f.0 }}</p>
{# {{ obj.p }}#}
{{ obj.city1 }}
{{ obj.city2 }}
{# {{ obj.city3 }}#}
{# {{ obj.city4 }}#}
<input type="submit" value="提交">
</form>
</body>
</html>
Form验证实例的更多相关文章
- tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...
- (实用篇)php通过会话控制实现身份验证实例
会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...
- jQuery 验证实例(shopnc二次开发)
shopnc 商家用户实现添加用户与前台用户分离, jQuery 验证实例 equalTo:等于 <div id="saleRefund" show_id="1&q ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Bootstrap+PHP表单验证实例
简单实用的Bootstrap+PHP表单验证实例,非常适合初学者及js不熟悉者,还有ajax远程验证 js验证表单 1 $(document).ready(function() { 2 $('#def ...
- jQuery-easyui和validate表单验证实例
jQuery EasyUI 表单 - 表单验证插件validatebox 使用时需要向页面引入两个css文件如下: <link rel="stylesheet" href=& ...
- formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用
实例技术:springmvc 实现功能:完整用户登录流程.输入信息规则校验.验证码异步校验. 功能清单: 1.springmvc控制器处理get请求(/member/login.html),进行静态页 ...
- Cookie && Session之验证实例
为了防止各种自动登录,以及反作弊和破坏,往往会要求登录时让用户输入随机产生的验证码(这组验证码是一组数字和字母),这样可以起到一定的防止他人利用程序让机器自动反复登录的情况.在PHP下要实现这种功能是 ...
- 本博文将一步步带领你实现抽屉官网的各种功能:包括登陆、注册、发送邮箱验证码、登陆验证码、页面登陆验证、发布文章、上传图片、form验证、点赞、评论、文章分页处理以及基于tronado的后端和ajax的前端数据处理。
本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tronado的后端和ajax的 ...
- Django 进阶篇之 Form验证
Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ...
随机推荐
- WPF 控件库
1. wpftoolkit: https://archive.codeplex.com/?p=wpftoolkit 2. wpg : https://archive.codeplex.com/? ...
- 库卡KUKA机器人KRC4伺服马达维修指导分析
通常情况下,库卡机器人伺服电机是实现机器人的关键组件,它提供了动力.位置和速度控制力和扭矩控制以及闭环控制等功能,使得库卡机器人能够在各种应用场景中发挥机器本身的性能. 一. 如果KUKA库卡机器人K ...
- SWD下载口的端口状态
1.关于SWD SWD下载口的端口状态:SWD为上拉,SWC为下拉. SWD是MCU下载程序和调试的端口,分为四线制和五线制 四线制:VCC GND SWDIO SWCKL 五线制:VCC GND S ...
- Docker 镜像存储目录的位置修改教程
以下是在 Linux 系统中修改 Docker 镜像存储目录位置的一般步骤: 查看当前 Docker 的默认存储目录:使用docker info命令可以查看 Docker 存储驱动程序和默认存储位置, ...
- Blazor Hybrid适配到HarmonyOS系统
1. 前言 Blazor Hybrid是一个基于Web技术的MVVM开发模式的客户端框架,它只有UI是由Webview渲染,而逻辑均由.NET开发,可以突破浏览器限制访问本地文件,或者发起TCP或者U ...
- 「二」nginx下载与安装
1.下载地址(开源版):https://nginx.org/en/download.html wget https://nginx.org/download/nginx-1.14.2.tar.gz 2 ...
- 【Python】读取写入INI文件
最近,写个abaqus的python脚本,需要输入的item比较多,而且也有一些不经常修改但又可能要修改的option.如果都用abaqus的getinput()和getinputs()函数,那输入的 ...
- PanWeiDB2.0异构数据库访问测试
PanWeiDB2.0异构数据库访问测试 异构数据库访问兼容性测试一览表 No 访问路径 多维度结果 备注 1 PanWeiDB(集中式)-访问-PanWeiDB(集中式) √ 支持复杂SQL 2 P ...
- Java SE 24 新增特性
Java SE 24 新增特性 作者:Grey 原文地址: 博客园:Java SE 24 新增特性 CSDN:Java SE 24 新增特性 源码 源仓库: Github:java_new_featu ...
- linux下nginx常用命令
1.查找nginx路径:whereis nginx2.启动 service nginx start3.查看Nginx的版本号:nginx -V4.停止 nginx -s stop5.退出 nginx ...