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:
        """
        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‘: ‘[email protected]‘,‘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})

试用

时间: 2024-10-08 23:53:18

django补充和form组件的相关文章

Django 框架篇(九): Django中的Form 组件

Django中的Form组件,帮我们处理了 form表单中的校验, 和错误提示的处理: 主要功能: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 使用form组件实现注册功能 1.  定义一个类, 继承django中的 forms.Form 代码实例: from django import forms # 按照Django form组件的要求自己写一个类 class RegForm(forms.Form): name = forms.CharField(label="用

Django框架之Form组件

新手上路 From组件的主要功能: 1,对form表单提交的数据进行校验. 内部基于正则进行匹配 2,from表单提交保存上次提交的数据. 生成HTML标签 初入大荒 1,创建Form类 class StudentForm(Form): #字段名,最好跟数据库内的字段名一样,好操作 #如CharField,内部包含了正则表达式, name = fields.CharField(max_length=12, min_length=2, required=True, widget=widgets.T

Django框架 之 form组件

浏览目录 Form介绍 普通的登录 使用form组件 Form详情 常用字段 校验 进阶 使用Django Form流程 一.Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确.如果用户输入的内容有错误就需要在页面上相应的位置显示显示对应的错误信息.. Django form组件就实现了上面所述的功能. 总结一下,其

Django—分页器与form组件

目录 分页器 现成分页器代码 如何使用 后端 前端 form组件 form 校验组件 使用校验组件与钩子函数 三种渲染方式 正则校验* 分页器 现成分页器代码 只需要会使用即可. 在Django项目下新建utils文件夹,新建一个py文件,放入封装好的分页器代码. class Pagination(object): def __init__(self, current_page, all_count, per_page_num=10, pager_count=11): """

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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 def foo(request):     if request.method=="POST":         regForm=Reg

用Django内置form组件实现注册

HTML页面代码块: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 6 <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> 7 <title>首页</title&

Django ==&gt; Form 组件

Django ==> Form 组件 目录: 1.基本使用 2.form中字段和插件 3.自定义验证规则 4.动态加载数据到form中 Action: 1.基本使用 django 中的Form组件有一下功能: 1.生成html标签 2.验证用户数据(显示错误信息) 3.html form 提交保留上次提交数据 4.初始化页面显示内容 要使用 form 类,首先需要创建这个类,方法如下: from django.forms import Form from django.forms import

Django Form组件实例:登录界面[Form表单提交,Ajax提交]

"""本例中使用Form和Ajax进行了数据提交,Form提交有一个问题,就是输入错误的数据,刷新之后原有的数据会丢失.注意到Form组件可以生成HTML标签,将Form生成的对象传到前端,就可以保留原有的内容,具体见下文:""" 1 from django.shortcuts import * 2 from app02 import models 3 import json 4 5 # Create your views here. 6 def

Django【十三】form组件。

一.form组件 form组件的功能: 检验功能 前端生成HTML页面 还能保留输入的内容 form组件的用法: from django import forms # Create your views here. # 定义一个类 class Myform(forms.Form): title = forms.CharField( # 通过from表单进行验证的时候,验证输入title字段的数据,参数用于验证 max_length=20, min_length=2, ) # CharField/