Model常用操作:
- 参数:filter 三种传参方式
- all(得到的是列表),values(字典),values_list(元祖) [obj(id,name,pwd,email),obj(id,name,pwd,email),]
models.UserInfo.objects.all() #取到所有的值 [obj(id,name,email)] # pwd未取值
data_list = models.UserInfo.objects.all().only('name','email') #通过only可以取到里面指定的数据 for item in data_list:
item.id
item.name [obj(id,pwd)] # pwd未取值
data_list = models.UserInfo.objects.all().defer('name','email')#这是不要取到这个字段 for item in data_list:
item.id
item.pwd #如果only里没有这个字段可以.到但是最好不要这样取值因为是重新取值一次
路由系统:

   反向生成URL:( url 三种方式)
/index/ func name=a1
{% url "a1"}#这个放在HTML页面
reverse('x')# 这个放到views函数里面 /index/(\d+)/ func name=a2
{% url "a2" 11 %}
reverse('x',args=(11,)) /index/(?P<nid>\d+)/ func name=a3
{% url "a2" nid=11 %}
reverse('x',kwargs={'nid':11})

这是url反向解析的另一种形式:

Django生命周期:
- wsgi
- wsgiref
- uwsgi Http请求本质:
a1=123&a2=456 如果POST方法发送数据,数据放在url里面也可以取到 {a1:13}
1. 数据库设计
- 属性相同归类到一张表中
- 连表有性能消耗
- 连表设计:
class UserType(models.Model):
"""
用户类型表,个数经常变动
"""
title = models.CharField(max_length=32) class UserInfo(models.Model):
"""
用户表:讲师和班主任
"""
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
email = models.CharField(max_length=32)
ut = models.ForeignKey(to="UserType")
- choices #这个适合用在字段类型不经常变动的情况下
# class UserInfo(models.Model):
# """
# 用户表
# """
# username = models.CharField(max_length=32)
# password = models.CharField(max_length=64)
# email = models.CharField(max_length=32)
#
# user_type_choices = (
# (1, '班主任'),
# (2, '讲师'),
# )
#
# user_type_id = models.IntegerField(choices=user_type_choices)
- 一张表中对同一个其他表做FK,M2M时,主要 related_name
- 注释 - 补充:
"""
ID Title
1 图片
2 挨踢1024
3 段子
"""
class NewsType(models.Model):
title = models.CharField(max_length=32) """
ID Title Summary News_Type
1 t.... 科技... 2
2 t.... 科技... 1
3 t.... 科技... 2 """
class News(models.Model):
title = models.CharField(max_length=32)
summary = models.CharField(max_length=255)
news_type = models.ForeignKey(to="NewsType") # 查看所有新闻
new_list = News.objects.all()
for row in new_list:
print(row.title,row.summary,row.news_type.title) """
ID Title Summary News_Type
1 t.... 科技... 2
2 t.... 科技... 1
3 t.... 科技... 2 """
class News(models.Model):
title = models.CharField(max_length=32)
summary = models.CharField(max_length=255) news_type_chices = (
(1,'图片'),
(2,'挨踢1024'),
(3,'段子'),
)
news_type = models.IntegerField(choices=news_type_chices) # 查看所有新闻
new_list = News.objects.all()
for row in new_list:
print(row.title,row.summary, row.get_news_type_display() ) 2. 登录
- 装饰器
- Django内置+自定义配置文件
3. 老师管理
- Form组件
- 创建类,继承Form
- 创建字段,字段=正则表达式; PS: 字段名称,required, error_messages = {required,invalid}
- form = MyForm(data=request.POST)
- form.is_valid()
- form.cleaned_data
- form.errors Form组件
1. 用户请求数据验证
2. 自动生成错误信息
3. 打包用户提交正确信息
4. 错误:保留上次输入内容
5. 定制页面上显示的HTML标签
Django Form组件
1. 创建规则(类,字段)
class Foo:
username = xxx
password = xxx
email = xxx
2. 数据和规则进行匹配
form = Foo(data=xxx,initial=初始化)
form.is_valid()
form.cleaned_data
form.errors views代码:
from django.shortcuts import render,redirect,HttpResponse
from django.conf import settings
# Create your views here. from app01 import models
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')
user = models.UserInfo.objects.filter(username=user,password=pwd).first()
if not user:
return render(request, 'login.html',{'msg':'用户名或密码错误'})
# request.session['user_info'] = {'id':user.id, 'username':user.username} request.session[settings.SJF] = {'id':user.id, 'username':user.username}
return redirect('/index/')
else:
return HttpResponse('滚') def auth(func):
def inner(request,*args,**kwargs):
user_info = request.session.get(settings.SJF)
if not user_info:
return redirect('/login/')
return func(request,*args,**kwargs)
return inner @auth
def index(request):
username = request.session[settings.SJF]['username']
return render(request,'index.html',{'username':username}) @auth
def teachers(request):
# models.UserInfo.objects.filter(ut__title='讲师')
teacher_list = models.UserInfo.objects.filter(ut_id=1) return render(request,'teachers.html',{'teacher_list':teacher_list}) from django.forms import Form
from django.forms import fields
from django.forms import widgets
class TeacherForm(Form):
username = fields.CharField(
required=True,
error_messages={'required':'用户名不能为空'},
widget=widgets.TextInput(attrs={'placeholder':'用户名','class':'form-control'})
) # 不能为空
password = fields.CharField(required=True,error_messages={'required':'密码不能为空'}, widget=widgets.TextInput(attrs={'placeholder':'密码','class':'form-control'})) # 不能为空
email = fields.EmailField(required=True,error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'},widget=widgets.EmailInput(attrs={'placeholder':'邮箱','class':'form-control'})) # 不能为空,且邮箱格式 @auth
def add_teacher(request):
if request.method == 'GET':
form = TeacherForm()
return render(request,'add_teacher.html',{'form':form})
else:
"""
1. 用户请求数据验证
2. 自动生成错误信息
3. 打包用户提交正确信息
4. 错误:保留上次输入内容
5. 定制页面上显示的HTML标签
Django Form组件
1. 创建规则(类,字段)
class Foo:
username = xxx
password = xxx
email = xxx
2. 数据和规则进行匹配
"""
form = TeacherForm(data=request.POST) # 数据和规则放置一起
if form.is_valid(): # 开始校验,并获取校验结果
# print('执行成功',form.cleaned_data) # 所有匹配成功,字典
# {'username': 'asd', 'password': 'sdf', 'email': 'sadf@live.com','ut_id':1}
form.cleaned_data['ut_id'] = 1
models.UserInfo.objects.create(**form.cleaned_data)
return redirect('/teachers/') return render(request, 'add_teacher.html',{'form':form}) @auth
def edit_teacher(request,nid):
obj = models.UserInfo.objects.filter(id=nid,ut_id=1).first()
if not obj:
return redirect('/teachers/') if request.method == "GET":
# 显示input,并且将数据库中的默认值填写到input框中
form = TeacherForm(initial={'username':obj.username,'password':obj.password,'email':obj.email})
return render(request,'edit_teacher.html',{'form':form})
else:
form = TeacherForm(data=request.POST)
if form.is_valid():
# 校验成功
models.UserInfo.objects.filter(id=nid).update(**form.cleaned_data)
return redirect('/teachers/')
return render(request,'edit_teacher.html',{'form':form}) class TestForm(Form):
caption = fields.CharField()
# xxx = fields.ChoiceField(choices=[(1,'讲师'),(2,'班主任')])
# xxx = fields.ChoiceField(choices=models.UserInfo.objects.values_list('id','username'))
# xxx = fields.ChoiceField(choices=models.UserType.objects.values_list('id','title'))
xxx = fields.MultipleChoiceField(choices=models.UserInfo.objects.values_list('id','username')) def test(request):
form = TestForm(initial={'xxx':4})
form = TestForm(initial={'xxx':[1,2,3]})
return render(request,'test.html',{'form':form})

Django之form表单认证的更多相关文章

  1. Django--分页器(paginator)、Django的用户认证、Django的FORM表单

    分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...

  2. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  3. php laravel加密 form表单认证 laravel分页

    use Illuminate\Support\Facades\Crypt; echo Crypt::encrypt(123); //加密echo "<br>";//解密 ...

  4. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  5. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

  6. C#之Form表单认证

    原文地址: https://blog.csdn.net/chadcao/article/details/7859394 ASP.NET的安全认证,共有“Windows”.“Form”.“Passpor ...

  7. Django 中的Form表单认证

    一.Form表单   1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签   1.2 创建表单类Form 1. 创建 ...

  8. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  9. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

随机推荐

  1. 人生第一次成功的sql注入

    看了一些学习视频,按着大神们的教程,搜索inurl:asp?id=,结果一个可以注入的站点都找不到,绝望. 不放弃,又找啊找,找啊找,终于找到了一个! 啦啦啦,注入点!ヾ(o◕∀◕)ノヾ!! 再来查数 ...

  2. EntityFramework附加实体

    //0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = 12; model.ATitle = "新 ...

  3. MySQL之库、表操作

    一.库操作 创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母.数字.下划线.特殊字符,要区分大小写,唯一性,不能使用关键字, ...

  4. java中的重载(overload)和重写(override)区别

    方法重载(overload): 方法重载就是在一个类中可以创建多个方法,它们具有相同的名字,但是具有不同的参数和不同定义,调用方法时通过传递给他们的不同参数个数和参数列表决定具体使用     哪   ...

  5. Linux中配置别名

    Linux中修改配置别名 ####用到的命令: alias是用来查看系统中有什么别名 source 让配置生效 临时取消别名的方法 unalias 临时取消别名 \cp /mnt/test.txt / ...

  6. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  7. SQL Server中锁与事务隔离级别

    SQL Server中的锁分为两类: 共享锁 排它锁 锁的兼容性:事务间锁的相互影响称为锁的兼容性. 锁模式 是否可以持有排它锁 是否可以持有共享锁 已持有排它锁 否 否 已持有共享锁 否 是 SQL ...

  8. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  9. JDK源码解析之Java SPI机制

    1. spi 是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件. 系统设计的各个抽象,往往 ...

  10. 使用iconv进行编码gb2312转utf8 转码失败的坑

    iconv 编码gb2312转utf8 转码失败的坑 使用背景 项目中使用thrift进行C#程序调用c++接口,其中的协议是通过json进行传输的,由于默认thrift使用utf8进行传输,而C#和 ...