Django基础三(form和template)
上一篇博文学习了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)的更多相关文章
- day 53-1 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...
- day 67 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...
- Django基础三之路由、视图、模板
Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...
- django基础 -- 10.form , ModelForm ,modelformset
一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...
- Django基础之form组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django基础之Form表单验证
Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...
- Django基础之form表单
1. form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时, 我们在好多场景下都需要对用户的输入做校验, 比如 ...
- Django基础三之视图函数
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- 03.Django基础三之视图函数
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
随机推荐
- JavaScript中高阶函数
https://zhuanlan.zhihu.com/p/23836323?refer=dreawer 高阶函数就是可以将函数作为另一个函数的参数.例如:将两个数的平方相加,这里匿名函数fn就是函数被 ...
- Modelsim中使用TCL脚本编写do文件实现自动化仿真
通常我们使用Modelsim进行仿真,是通过图形界面点点点来进行操作,殊不知Modelsim完美支持TCL脚本语言及批处理命令do文件.简单来说就是从你修改完代码后到你重新编译把需要的信号拉出来查看, ...
- ffmpeg 时间戳处理
视频的显示和存放原理 对于一个电影,帧是这样来显示的:I B B P.现在我们需要在显示B帧之前知道P帧中的信息.因此,帧可能会按照这样的方式来存储:IPBB.这就是为什么我们会有一个解码时间戳和一个 ...
- SAE提供服务分析
这个分析列表主要关注两个问题,服务能做什么,移植实现难度. AppConfig: 这个东西主要面向SAE本身的一些配置选项,移植时放弃这个东西,所以就不谈难度了Counter :这个东西提供某个操作的 ...
- 物流的纯css实现方法
首先我们来看看UI给出的设计图. 为什么到达是最前面,为什么物流顺序是倒叙的,这是什么用户习惯,这是我拿到设计稿的问题,但是这里不谈设计,因为审美这个东西无法评估.那么这里我就做一个顺序的来对比一下吧 ...
- php中的抽象方法和抽象类,简单明了,一点通
1.什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...
- 从数据库读取数据并动态生成easyui tree构结
一. 数据库表结构 二.从后台读取数据库生成easyui tree结构的树 1.TreeNode树结点类(每个结点都包含easyui tree 的基本属性信息) import java.io.Seri ...
- MIT算法导论课程
http://open.163.com/movie/2010/12/G/F/M6UTT5U0I_M6V2T1JGF.html
- JavaScript 之函数
刚开 始学习 JS 时,挺不习惯它函数的用法,就比如一个 function 里面会嵌套一个 function,对于函数里创建变量的作用域也感到很迷惑,这个的语法和 JAVA 相差太多,为此,阅读了&l ...
- python+selenium实现登录账户
selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...