会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 一篇文章带你了解Django Form组件(入门篇)!

一篇文章带你了解Django Form组件(入门篇)

时间:2025-11-05 11:44:15 来源:益强数据堂 作者:IT科技 阅读:459次

 

前言

Hey,篇文大家好呀,我是码农,星期八。

本次咱们来get一个新技能,章带m组Form组件。

Form组件主要用于验证表单数据。解D件入

为什么需要Form组件

注:Form组件,门篇只适用于,前后端未分离的项目中,主要用于验证表单数据,所以,关键字是表单!!!

比如像哔哩哔哩的注册界面。

我点击注册,篇文它不仅仅可以知道我的注册昵称是否存在,密码是否小于6位,手机号格式错误

还会把错误信息一直留在上面,章带m组给我提示。

我们就以这个为雏形,解D件入来简单的写一个小小的注册界面。

普通版注册

代码

urls.py

from django.urls import path from web import views urlpatterns = [     path(reg/,门篇 views.reg,), ] 

web/views.py

def reg(request):     if request.method == "GET":         return render(request, "reg.html")     nick = request.POST.get("nick")     pwd = request.POST.get("pwd")     phone = request.POST.get("phone")     error = {}     if len(pwd) < 6:         error["pwd"] = "密码小于6位"     if len(phone) != 11:         error["phone"] = "手机号格式错误"     # error为空表示未触发异常     if not error:         print("写入数据库", nick, pwd, phone)         return HttpResponse("注册成功")     else:         return render(request, "reg.html", {"error": error}) 

templates/reg.html

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>登录</title> </head> <body> <div style="width: 40%;margin: auto">     <form action="" method="post">         <div><input name="nick" type="text" placeholder="昵称"></div>         <div>             <input name="pwd" type="password" placeholder="密码">             <span>{{ error.pwd }}</span>         </div>         <div>             <input name="phone" type="text" placeholder="手机号">             <span>{{ error.phone }}</span>         </div>         <div><input type="submit"></div>     </form> </div> </body> </html> 

实现效果

如果填写的信息正常。

填写信息

跳转之后

如果填写的篇文信息错误。源码库

填写信息

错误提示

小总结

但是章带m组你发现虽然能把错误信息显示出来。

但是解D件入我原来填写的东西没了啊!!!,因为html form表单提交是刷新页面提交的!

雾草,没了,这是少的,如果有十几个???,那不就气死了

好像我记得我上学时,门篇好多网站都是这。。篇文。章带m组好像我也骂了很久,解D件入直到前后端分离时,才好一点!

Form组件版注册

再使用之前,需要将Django项目的settings.py的LANGUAGE_CODE设置为zh-hans

代码

以下代码可能看不懂,大概理解就好!

urls.py

同上

web/views.py

from django.shortcuts import render, HttpResponse from django.forms import Form from django.forms import fields from django.forms import widgets # Create your views here. class RegForm(Form):     name = fields.CharField(         widget=widgets.TextInput(attrs={"placeholder": "昵称"})     )     pwd = fields.CharField(         min_length=6,         widget=widgets.TextInput(attrs={"placeholder": "密码"})     )     phone = fields.CharField(         min_length=11,         max_length=11,         widget=widgets.TextInput(attrs={"placeholder": "手机号"})     ) def reg(request):     if request.method == "GET":         form = RegForm()         return render(request, "reg.html", {"form": form})     form = RegForm(request.POST, request.FILES)     # 验证表单数据     if form.is_valid():         result = form.clean()         print(result)         return HttpResponse("登录")     return render(request, "reg.html", {"form": form}) 

templates/reg.html

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>登录</title> </head> <body> <div style="width: 40%;margin: auto">     <form action="" method="post" novalidate>         {% for foo in form %}             <div>                 {{ foo }}                 <span style="color: red">{{ foo.errors.0 }}</span>             </div>         {% endfor %}         <div><input type="submit"></div>     </form> </div> </body> </html> 

实现效果

如果填写的信息正常。

同上

如果填写的信息错误。高防服务器

小总结

这是我点击提交之后报错的结果!

可以发现,即使刷新页面提交,还是会把原来的数据保存下来,并且还有验证失败的信息!

Form总结

从上述示例可以发现。

Django Form组件最起码具有以下功能:

生成HTML标签。 验证提交的数据。 保留提交之前的数据。

没错,它的主要功能其实也就是这。

如果使用Django进行开发,并且使没有前后端分离的,必用Form组件!

每一份发奋努力的背后,必定有巨大的赏赐。WordPress模板

(责任编辑:系统运维)

推荐内容
  • 580超频(发挥极致潜力,让电脑更强大)
  • 我从未见过的牛逼解说方式!Redis五种数据结构,看一遍就懂了
  • 8个SQL错误:您是否犯了这些错误?
  • 域名商城是什么意思?注册商城域名怎么样?
  • apt-get和apt-cache是Ubuntu Linux中的命令行下的包管理工具。 apt-get的GUI版本是Synaptic包管理器。该文中我们会展示apt-get和apt-cache命令的15个不同例子。示例:1 列出所有可用包复制代码代码如下:linuxtechi@localhost:~$ apt-cache pkgnames    account-plugin-yahoojp    ceph-fuse    dvd+rw-tools    e3    gnome-commander-data    grub-gfxpayload-lists    gweled    .......................................示例:2 用关键字搜索包这个命令在你不确定包名时很有用,只要在apt-cache(LCTT 译注:这里原文是apt-get,应为笔误)后面输入与包相关的关键字即可。复制代码代码如下:linuxtechi@localhost:~$ apt-cache search web server    apache2 - Apache HTTP Server    apache2-bin - Apache HTTP Server (binary files and modules)    apache2-data - Apache HTTP Server (common files)    apache2-dbg - Apache debugging symbols    apache2-dev - Apache HTTP Server (development headers)    apache2-doc - Apache HTTP Server (on-site documentation)    apache2-utils - Apache HTTP Server (utility programs for web servers)    ......................................................................注意: 假如你安装了“apt-file”包,我们就可以像下面那样用配置文件搜索包。复制代码代码如下:linuxtechi@localhost:~$ apt-file search nagios.cfg    ganglia-nagios-bridge: /usr/share/doc/ganglia-nagios-bridge/nagios.cfg    nagios3-common: /etc/nagios3/nagios.cfg    nagios3-common: /usr/share/doc/nagios3-common/examples/nagios.cfg.gz    pnp4nagios-bin: /etc/pnp4nagios/nagios.cfg    pnp4nagios-bin: /usr/share/doc/pnp4nagios/examples/nagios.cfg示例:3 显示特定包的基本信息复制代码代码如下:linuxtechi@localhost:~$ apt-cache show postfix    Package: postfix    Priority: optional    Section: mail    Installed-Size: 3524    Maintainer: LaMont Jones     Architecture: amd64    Version: 2.11.1-1    Replaces: mail-transport-agent    Provides: default-mta, mail-transport-agent    .....................................................示例:4 列出包的依赖复制代码代码如下:linuxtechi@localhost:~$ apt-cache depends postfix    postfix     Depends: libc6     Depends: libdb5.3     Depends: libsasl2-2     Depends: libsqlite3-0     Depends: libssl1.0.0     |Depends: debconf     Depends:      cdebconf     debconf     Depends: netbase     Depends: adduser     Depends: dpkg    ............................................示例:5 使用apt-cache显示缓存统计复制代码代码如下:linuxtechi@localhost:~$ apt-cache stats     Total package names: 60877 (1,218 k)    Total package structures: 102824 (5,758 k)     Normal packages: 71285     Pure virtual packages: 1102     Single virtual packages: 9151     Mixed virtual packages: 1827     Missing: 19459    Total distinct versions: 74913 (5,394 k)    Total distinct descriptions: 93792 (2,251 k)    Total dependencies: 573443 (16.1 M)    Total ver/file relations: 78007 (1,872 k)    Total Desc/File relations: 93792 (2,251 k)    Total Provides mappings: 16583 (332 k)    Total globbed strings: 171 (2,263 )    Total dependency version space: 2,665 k    Total slack space: 37.3 k    Total space accounted for: 29.5 M示例:6 使用 “apt-get update” 更新仓库使用命令“apt-get update”, 我们可以重新从源仓库中同步文件索引。包的索引从“/etc/apt/sources.list”中检索。复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get update     Ign http://extras.ubuntu.com utopic InRelease     Hit http://extras.ubuntu.com utopic Release.gpg     Hit http://extras.ubuntu.com utopic Release     Hit http://extras.ubuntu.com utopic/main Sources     Hit http://extras.ubuntu.com utopic/main amd64 Packages     Hit http://extras.ubuntu.com utopic/main i386 Packages     Ign http://in.archive.ubuntu.com utopic InRelease     Ign http://in.archive.ubuntu.com utopic-updates InRelease     Ign http://in.archive.ubuntu.com utopic-backports InRelease     ................................................................示例:7 使用apt-get安装包复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get install icinga上面的命令会安装叫“icinga”的包。示例:8 升级所有已安装的包复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get upgrade示例:9 更新特定的包在apt-get命令中的“install”选项后面接上“-only-upgrade”用来更新一个特定的包,如下所示:复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get install filezilla --only-upgrade示例:10 使用apt-get卸载包复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get remove skype上面的命令只会删除skype包,假如你想要删除它的配置文件,在apt-get命令中使用“purge”选项。如下所示:复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get purge skype我们可以结合使用上面的两个命令:复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get remove --purge skype示例:11 在当前的目录中下载包复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get download icinga    Get:1 http://in.archive.ubuntu.com/ubuntu/ utopic/universe icinga amd64 1.11.6-1build1 [1,474 B]    Fetched 1,474 B in 1s (1,363 B/s)上面的目录会把icinga包下载到你的当前工作目录。示例:12 清理本地包占用的磁盘空间复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get clean上面的命令会清空apt-get所下载的包占用的磁盘空间。我们也可以使用“autoclean”选项来代替“clean”,两者之间主要的区别是autoclean清理不再使用且没用的下载。复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get autoclean    Reading package lists... Done    Building dependency tree    Reading state information... Done示例:13 使用“autoremove”删除包当在apt-get命令中使用“autoremove”时,它会删除为了满足依赖而安装且现在没用的包。复制代码代码如下: linuxtechi@localhost:~$ sudo apt-get autoremove icinga示例:14 显示包的更新日志复制代码代码如下: linuxtechi@localhost:~$ sudo apt-get changelog apache2    Get:1 Changelog for apache2 (http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.4.10-1ubuntu1/changelog) [195 kB]    Fetched 195 kB in 3s (60.9 kB/s)上面的命令会下载apache2的更新日志,并在你屏幕上分页显示。示例:15 使用 “check” 选项显示损坏的依赖关系复制代码代码如下:linuxtechi@localhost:~$ sudo apt-get check    Reading package lists... Done    Building dependency tree    Reading state information... Done
  • SpringBoot+Nacos+Kafka实现微服务流编排
热点内容