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错 ...
随机推荐
- Web 前台优化
大型网站--前端性能优化和规范 2013-10-28 09:00 by 贤达, 2769 阅读, 10 评论, 收藏, 编辑 Web性能涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到 ...
- PhpStudy如何开启Apache的gzip压缩功能?
要让apache支持gzip功能,要用到deflate_Module和headers_Module. 打开apache的配置文件httpd.conf,大约在105行左右,找到以下两行内容:(这两行不是 ...
- 微信小程序开发框架技术选型
目前微信小程序开发有三种方式,原生微信小程序,使用mpVue或wepy微信小程序开发框架. 三种开发方式横向对比资料如下:
- Effective Java 第三版——42.lambda表达式优于匿名类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- C# Ioc、DI、Unity、TDD的一点想法和实践
面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP). 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念) 控制反转( ...
- sniffer pro 使用方法
一.捕获数据包前的准备工作 在默认情况下,sniffer将捕获其接入碰撞域中流经的所有数据包,但在某些场景下,有些数据包可能不是我们所需要的,为了快速定位网络问题所在,有必要对所要捕获的数据包作过滤. ...
- 网络模型 - 每天5分钟玩转 Docker 容器技术(169)
本节我们讨论 Kubernetes 网络这个重要主题. Kubernetes 作为编排引擎管理着分布在不同节点上的容器和 Pod.Pod.Service.外部组件之间需要一种可靠的方式找到彼此并进行通 ...
- String和StringBuffer的区别?
这个我经常用的是String,说真的,用StringBuffer的次数还真是少,唯一让我觉得特别的方法就是appand这个方法是StringBuffer独有的,那么他们到底有什么区别呢,我们知道Str ...
- PHP 的 uniqid 函数产生的 id 真的是唯一的么?
PHP 的 uniqid 函数产生的 id 真的是唯一的么? 最近使用到了 uniqid,就产生了疑问?uniqid 生成的 id 由什么组成?真的是唯一的么?什么情况下会产生冲突? 从文档中看到 u ...
- MySQL(二)MySQL的安装和简单使用
1.MySQL产品的介绍 MySQL数据库属于MySQL AB公司,总部位于瑞典,后被Oracle收购. 优点: (1)成本低:开放源代码,可以免费使用 (2)性能高:执行很快 (2)简单:很容易安装 ...