django补充和form组件
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')
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
路由系统:
反向生成URL:
/index/ func name=a1
{% url "a1"}
reverse('x')
/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})
Django生命周期:
- wsgi
- wsgiref
- uwsgi
Http请求本质:
a1=123&a2=456
{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
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:
"""
. 用户请求数据验证
. 自动生成错误信息
. 打包用户提交正确信息
. 错误:保留上次输入内容
. 定制页面上显示的HTML标签
Django Form组件
. 创建规则(类,字段)
class Foo:
username = xxx
password = xxx
email = xxx
. 数据和规则进行匹配
"""
form = TeacherForm(data=request.POST) # 数据和规则放置一起
if form.is_valid(): # 开始校验,并获取校验结果
# print('执行成功',form.cleaned_data) # 所有匹配成功,字典
# {'username': 'asd', 'password': 'sdf', 'email': 'sadf@live.com','ut_id':}
form.cleaned_data['ut_id'] =
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=).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=[(,'讲师'),(,'班主任')])
# 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':})
form = TestForm(initial={'xxx':[,,]})
return render(request,'test.html',{'form':form})
试用
django补充和form组件的更多相关文章
- Django中的form组件
Django中的form组件有两大作用 1.验证获取正确的结果或者错误信息 2.生成html代码 一.为什么需要form组件呢? 在写form表单,提交数据时,自己写验证的代码是一件非常困难的事情. ...
- Django框架 之 form组件的钩子
Django框架 之 form组件的钩子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3 ...
- Django框架 之 form组件
Django框架 之 form组件 浏览目录 Form介绍 普通的登录 使用form组件 Form详情 常用字段 校验 进阶 使用Django Form流程 一.Form介绍 我们之前在HTML页面中 ...
- Django 的 model form 组件
Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...
- Django框架11 /form组件、modelForm组件
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
- Django的model form组件
前言 首先对于form组件通过全面的博客介绍,对于form我们应该知道了它的大致用法,这里我们需要明确的一点是,我们定义的form与model其实没有什么关系,只是在逻辑上定义form的时候字段名期的 ...
- Django框架之Form组件
一.初探Form组件 在介绍Form组件之前,让大家先看看它强大的功能吧!Go... 下面我们来看看代码吧! 1.创建Form类 from django.forms import Form from ...
- Python开发【Django】:Form组件
Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...
- Django基础之form组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
随机推荐
- python之路--迭代器和生成器
迭代: 迭代器协议: 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- Jmeter分布式及在Linux上执行jmeter脚本
Jmeter分布式 主控机即自己的电脑,控制并发数 压力机即别人的机器,和主控机一起添加压力 1.其他的压力机需要启动Jmeter-server.bat 启动成功页面 2.主控机的Jmeter 的bi ...
- python第三方库函数安装
以安装pillow库为例 第一.在cmd环境中安装. 第二.输入pip -h(注意之间有个空格),会出现下图界面. 第三.输入pip install pillow,就会自动安装第三方库. 注意:这里面 ...
- bat中errorlevel与%errorlevel%的区别
bat中errorlevel与%errorlevel%的区别? 他们都是判断上个命令的返回值.当使用if errorlevel 值 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于值 的 ...
- linux之创建用户
用户 useradd xxx 创建用户 默认是普通用户 useradd -u666 web 创建新用户 设置id号 groupadd -g 777 ...
- xslfo和fop使用中的一些问题
最近项目中使用fop和xslfo打印pdf,遇到一些问题记录下来: 1.表格跨行.跨列: 使用number-rows-spanned和number-columns-spanned属性 比如:<f ...
- mybatis(一、原理,一对多,多对一查询)
MyBatis框架及原理分析 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 ...
- ubuntu16.04下 sublime text输入中文
1.git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2.cd sublime-text-imfix && ./s ...
- quartz Cron表达式解读
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表. CronT ...
- 【转】matlab学习(5) 读取excel文件
转自:https://blog.csdn.net/thy19988/article/details/78489623 1.使用函数xlsread读取单个文件(1)num=xlsread(filenam ...