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错 ... 
随机推荐
- Linux的chkconfig命令详解
			chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法: chkconfig [--a ... 
- java——抽象
			抽象类:特点:1,方法只有声明,没有实现时,该方法就是抽象方法,需要被abstract关键字修饰.抽象方法必须定义在抽象类中,该类也必须被abstract修饰2,抽象类不可以被实例化.为什么?因为调用 ... 
- SignUtil
			最近接的新项目 加密比较多 我就记录下. SignUtil是jnewsdk-mer-1.0.0.jar com.jnewsdk.util中的一个工具类.由于我没有百度到对应的信息.所以我只能看源码 ... 
- Scala编程入门---函数式编程
			高阶函数 Scala中,由于函数时一等公民,因此可以直接将某个函数传入其他函数,作为参数.这个功能是极其强大的,也是Java这种面向对象的编程语言所不具备的. 接收其他函数作为函数参数的函数,也被称作 ... 
- win10更新失败——适用于Windows 10 Version 1709 的03累积更新,适合基于x64系统(KB4088776)更新失败
			相信最近很多人被windows的更新折磨坏了,下面来介绍一下解决办法,有用的话请点赞! 首先将C盘中的这个文件夹删除:"C:\Windows\System32\Tasks\Microsoft ... 
- Selenium调用webdriver.chrome()出错
			问题描述: 今天因为在学习要使用selenium这个python库,我下载好了selenium,并且也Import成功了,但是在我使用webdirver.chorme()时,却提示PATH路径中没有c ... 
- php递归实现无限级分类树
			作者: PHP中文网|标签:PHP 递归 无限级树|2017-5-18 18:09 无限级树状图可以说是无限级栏目的一个显著特征,我们接下来就来看看两种不同的写法. 一.数据库设计 1 2 3 ... 
- SpringCloud实战-Eureka
			熟悉微服务架构或Dubbo框架的都知道,微服务中最核心.最基础的组件就是注册中心了.下面利用Spring Cloud Eureka实现服务注册中心.并注册一个简单的服务提供者. 首先先创建一个spir ... 
- Django rest framework(7)----分页
			目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ... 
- MySQL下载安装配置和Navicat for MySQL的安装配置
			MySQL 一.下载 地址:MySQL :: Download MySQL Installer 选择那个几百M的msi文件下载 二.安装 第一步: 安装许可 双击安装文件,在如下图所示界面中勾选&qu ... 
