上一篇博文学习了Django的View和urls,接下来是对django form 和 template的学习。

1 django form

django form为我们提供了便捷的方式来创建一些HTML获取数据的元素标签。Django form内建widget请点这里

我们用django form来构建一个十分常见的用户注册的form表单,首先在myBlog文件目录下新建一个forms.py文件,并且添加如下内容:

from django import forms #导入forms

class RegisterForm(forms.Form):
"""用户注册时,用于获取用户基础信息的表单."""
SEX_CHIOCES=(
(1,'男'),
(2,'女'), )
username=forms.CharField (label='用户名',max_length=50)
Email=forms.EmailField(label='邮箱地址',required=False)#required如果不指定则默认为Ture(该项)必须填写,required=False允许不填写
password=forms.CharField(label='密码',max_length=50,widget=forms.PasswordInput)
password_check=forms.CharField(label='密码确认',max_length=50,widget=forms.PasswordInput)
gender=forms.ChoiceField(label='性别',widget=forms.Select,choices=SEX_CHIOCES)

上面的代码,我们首先导入了django的forms,然后自定义了一个名为RegisterForm的表单类。这里需要强调的是和自定义视图类相似,自定义form表单必须要继承forms.Form这个类。

2. template模板

首先在myBlog文件目录下新建一个myBlogTemplate的文件目录。在myBlogTemplate下新建一个register.html的文件,添加下面的内容:

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>用户注册页面</title>
</head>
<body>
<form class="" action="index.html" method="post">
{{ reg_form }}<!--占位符-->
<button type="submit" name="sub_btn">确认注册</button>
</form> </body>
</html>

3 设置template模板路径

打开项目文件目录下的setting.py文件,找到TEMPLATES的list,在前面添加template模板路径变量,并且把模板路径添加到匹配路径中:

BLOG_TEMPLATE=os.path.join(BASE_DIR,'myBlog/BlogTemplate')#定义模板的路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BLOG_TEMPLATE],#把模板路径添加到匹配路径list中
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

4 在views.py中使用自定义form和template

编辑myBlog文件目录下的view.py文件。首先引入我们刚才自定义的form表单:

from myBlog.forms import RegisterForm#导入我们在forms.py自定义的form表单

接着添加下面的代码,作用是定义一个名为RegisterView的视图类,并且定义了GET请求的处理方法:

class RegisterView(View):
"""用于处理用户注册相关的请求"""
def get(self,request):
template_name='register.html'#模板名称
form=RegisterForm()#获取一个RegisterForm的实例
return render(request,template_name,{'reg_form':form}) #返回请求的响应,并且渲染模板

还记得我们在新建的register.html文件中有一个占位符{{ reg_form }}么?

参数中的字典{'reg_form':form}意思是用form这个后台传回的实例取代模板中的占位符。

5 设置路由urls.py

编写完视图类,接下来就是配置路由了,编辑myBlog下的urls.py文件进行映射:

from django.contrib import admin
from django.urls import path from myBlog.views import HollowView , RegisterView#导入RegisterView urlpatterns = [
path('admin/', admin.site.urls),
path('',HollowView.as_view()),
path('registe',RegisterView.as_view()),#把url请求映射到RegisterView
]

接下来就可以启动服务python manage.py runserver,用浏览器访问127.0.0.1:8000/blog/regist

就可以看到我们自定义的form显示在浏览器上了:

.

我们再来测试一下,往里面填入一下内容然后点击‘提交’:

.

可以看出密码部分是隐藏了输入内容的,而且邮箱格式不对的话会自动提示!

那么,Django form表单和HTML表单到底有什么不一样呢?实际上是一样的。我们可以用浏览器查看网页的HTML代码(按F12,调出开发者工具,点击上面的Elements查看当前页面元素),点开body节点和form节点可以看到:



Django form已经转化成了html格式的代码。

Django基础三(form和template)的更多相关文章

  1. day 53-1 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

  2. day 67 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

  3. Django基础三之路由、视图、模板

    Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...

  4. django基础 -- 10.form , ModelForm ,modelformset

    一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...

  5. Django基础之form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  6. Django基础之Form表单验证

    Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...

  7. Django基础之form表单

    1. form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时, 我们在好多场景下都需要对用户的输入做校验, 比如 ...

  8. Django基础三之视图函数

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  9. 03.Django基础三之视图函数

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

随机推荐

  1. wave音频格式一窥

    学习需要不断的刨根问底,首先,RIFF是微软多媒体格式的一个规范. 其次,有很多用C++实现wave解析的好文章.

  2. springMVC 中的restful 架构风格

    RESTful架构 : 是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. ...

  3. How to change from default to alternative Python version on Debian Linux

    https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux You ...

  4. 学习JavaScript最佳实践方法

    首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别急着骂,先听我说. 你叫一个大学生去教小学数 ...

  5. python笔记:#003#PyCharm 的初始设置

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  6. Mysql-单表查询的操作和注意事项

    一. 单表查询的语法 二 .关键字的执行优先级(重点) 三 .简单查询 四 .WHERE约束 五. 分组查询:GROUP BY 六 .HAVING过滤 七 .查询排序:ORDER BY 八 .限制查询 ...

  7. 瞎捣鼓的code highlight

    int a ; int b; public int  a ;int b   char c; h2 { text-align: left;}.postTitle{ background-color:#F ...

  8. kibana-Request Timeout after 30000ms故障解决

    etc在日志系统搭建起来后大半年一直没有出现大的问题,在上个月的某段时间,我慢慢发现有这个问题的存在了,首先是自己遇到过,后面也有人反应这个问题.于是就开始对这个问题进行分析: 1.因为服务器是放在国 ...

  9. Python并发编程之线程消息通信机制任务协调(四)

    大家好,并发编程 进入第四篇. 本文目录 前言 Event事件 Condition Queue队列 总结 . 前言 前面我已经向大家介绍了,如何使用创建线程,启动线程.相信大家都会有这样一个想法,线程 ...

  10. nginx常用配置系列-反向代理

    接上篇,反向代理的原理与用途很多地方有讲,用文字说再多可能也表达不清楚,下面贴一张拓扑图,介绍下什么叫反向代理 以上图有两种情景 1. 访问者的客户端是 local ,要访问baidu的服务器,bai ...