当前位置: 首页 > news >正文

Django具体操作(三)

理解表单类:上一篇中讲到了用户登录代码实现,用户登录框可以用HTML代码实现或者是表单实现。

在.个人的app下创建forms.py(这里很多人会写成from)

这个文件是专门存放各种与表单有关的类。

class Foo(Form): #必须继承
    username = xxx
    password = xxx
    email = xxx
注意这里的字段必须和input的name字段一致
from django.forms import Form
from django.forms import fields
from django.forms import widgets
from django.shortcuts import render,redirect
from app01 import models
# Create your views here.
from django.forms import Form
from django.forms import fields
from django.forms import widgets
# 1、创建规则
class TeacherForm(Form):  #必须继承Form
    # 创建字段,本质上是正则表达式
    username = fields.CharField(
        required=True,     #必填字段
        error_messages={"required":"用户名不能为空!!"},  #显示中文错误提示
        widget=widgets.TextInput(attrs={"placeholder":"用户名","class":"form-control"})  #自动生成input框
       )
    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"})  # 自动生成input框
    ) #不能为空且邮箱格式要一致

# 2、使用规则:将数据和规则进行匹配
def teacherindex(request):
    teacher_obj = models.UserInfo.objects.all()
    # print(teacher_obj)
    return render(request,"teacherindex.html",{"teacher_obj":teacher_obj})
def add(request):
    if request.method=="GET":
        form = TeacherForm()  #只是让显示一个input框
        return render(request,"add.html",{"form":form })
    else:
        form = TeacherForm(data=request.POST)
        # print(form)  #<QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
        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.all().create(**form.cleaned_data)
            return redirect("/teacherindex/")
        else:
            # print("=====?",form.errors,type(form.errors))#返回失败的结果
            # print(form.errors["username"][0])   #拿到返回失败的结果,渲染到页面
            return render(request,"add.html",{"form":form})

或者是下面的方法:

from django import forms

class LoginForm(form.Form):  # 记住格式
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

# 实例化看下效果
login_form = LoginForm()
print(login_form)


<tr><th><label for='id_username'>Usernaem:</label></th><td>
<input id='id_username' name='username' type='text' requuired/></td></tr>

值得注意的是form表单里面的类和前段页面的name是相同的,因为不需要看前段模板也可以生成HTML页面

上面这个实例化类里面没有传递任何数据,得到的是HTML代码,我们可以认为不管是前端的表单,还是后端的表单类,都是对象,这个对象的属性就是表单中的对话框(input)

 

转载于:https://www.cnblogs.com/zhoulixiansen/p/9158761.html

相关文章:

  • 超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉
  • 51NOD 1565:模糊搜索——题解
  • STL priority实例
  • Severless SQL on OSS 实验(DataLakeAnalytics on OSS)
  • MYSQL下对远程用户进行连接授权
  • php中mysqli 处理查询结果集的几个方法
  • python常用模块
  • windows mysql 8
  • 云计算大数据,知识体系
  • 瓜脸识别神器让标签看得见,看ET农业大脑是如何将生鲜品牌化?
  • Jenkins+pipeline+参数构建+人工干预确定
  • sql -- 移除数据中的换行符和回车符
  • 总结http get和post的区别
  • SpringBoot案例中关于添加的方式
  • WORD文档怎么转换成EXCEL
  • SegmentFault for Android 3.0 发布
  • __proto__ 和 prototype的关系
  • 11111111
  • Angularjs之国际化
  • canvas 高仿 Apple Watch 表盘
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker 笔记(2):Dockerfile
  • Electron入门介绍
  • ES6简单总结(搭配简单的讲解和小案例)
  • gf框架之分页模块(五) - 自定义分页
  • Laravel 实践之路: 数据库迁移与数据填充
  • Map集合、散列表、红黑树介绍
  • maven工程打包jar以及java jar命令的classpath使用
  • supervisor 永不挂掉的进程 安装以及使用
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 半理解系列--Promise的进化史
  • 从0到1:PostCSS 插件开发最佳实践
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 如何解决微信端直接跳WAP端
  • 如何进阶一名有竞争力的程序员?
  • 入手阿里云新服务器的部署NODE
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信开源mars源码分析1—上层samples分析
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • #Linux(帮助手册)
  • $jQuery 重写Alert样式方法
  • (02)vite环境变量配置
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (day 12)JavaScript学习笔记(数组3)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (八十八)VFL语言初步 - 实现布局
  • (备忘)Java Map 遍历
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计ssm电影分享网站
  • (接口自动化)Python3操作MySQL数据库
  • (九)c52学习之旅-定时器
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world