Django Web 极简教程(六)- Django Form(Part A)

简介: Django Web 极简教程(六)- Django Form(Part A)

一、Form 表单

普通 Form 表单

表单是在浏览器中用于收集后端需要的信息并提交给后端的一个工具,常见的表单如:登录表单、注册表单、请假表单等,表单分为四个部分:表单提交地址、表单提交方法、表单组件、表单提交按钮。

  • <form action="#" method="POST">:action 属性用来定义表单信息提交的地址,method 属性用来定义提交的方式
  • <input type=text />:输入框,用来收集提交到后端的信息
  • <input type="submit" value="登录">:提交按钮,类型为 submit

image.png

Django Form 表单

类似 Flask 集成的 WTForms,Django Form 也可以模拟生成前端的 HTML 表单,而无须手动书写,并且支持表单信息的验证

使用 PyCharm 创建一个新的项目 Django 项目 django_forms,并创建应用 lima

image.png

PyCharm 已经自动配置好了模板所在目录

image.png

在 lima 应用中创建 urls.py

from django.urls import path
from lima import views
urlpatterns = [
]
复制代码

在根 urls.py 中添加 lima 应用的路由

from django.contrib import admin
from django.urls import path, include
from lima import urls as lima_urls
urlpatterns = [
    path('admin/', admin.site.urls),
    path('lima/', include(lima_urls))
]
复制代码

在 lima 应用中的 views.py 中定义一个视图类 Register,并在该类中定义 get 和 post 方法。

from django.shortcuts import render
from django.views.generic import View
class Register(View):
    TEMPLATE = 'register.html'
    def get(self, request):
        print('这是处理 GET 请求的方法')
        return render(request, self.TEMPLATE)
    def post(self, request):
        print('这是处理 POST 请求的方法')
        return render(request, self.TEMPLATE)
复制代码

在该应用的 urls.py 中增加路由

# 其余代码不变
urlpatterns = [
    path('register/', views.Register.as_view(), name='register')
]
复制代码

在 templates 目录下新增 register.html 页面,在 body 标签中增加如下内容:

<h2>注册表单</h2>
<form action="{% url 'register' %}" method="post">
    用户名:<input type="text" name="username"> <br>
    密码:<input type="password" name="password"> <br>
    <input type="submit" value="注册">
</form>
复制代码

启动 Django 应用,浏览器访问 /lima/register/

image.png

PyCharm 控制台输出 ”这是处理 GET 请求的方法“,通过调用 Register 视图类的 get 方法进入到注册页面。

image.png

在视图类中的 post 方法获取表单中传来的数据

def post(self, request):
    print('这是处理 POST 请求的方法')
    username = request.POST.get('username')
    password = request.POST.get('password')
    print('表单中传来的 username 为 {}, password 为 {}'.format(username, password))
    return render(request, self.TEMPLATE)
复制代码

在表单中填入数据

image.png

点击注册按钮,页面出现了 CSRF 的报错

image.png

在 register.html 的表单中添加 {% csrf_token %} 解决 CSRF 报错,再次输入数据,点击注册按钮,控制台中输出了表单提交的信息

image.png

之后就可以根据表单提交的信息与数据库交互执行 CRUD 操作了

使用 Django 表单代替 HTML 表单

在 lima 应用中新增 forms.py,在该文件中新增一个 RegisterForm 类继承 Form 类

from django import forms
from django.forms import fields
class RegisterForm(forms.Form):
    username = fields.CharField(max_length=10, required=True)
    password = fields.CharField(widget=forms.PasswordInput)
复制代码

在视图类 Register 中实例化 RegisterForm 并返回到前端的 register_form.html 中

# 其余代码保持不变
class Register(View):
    # TEMPLATE = 'register.html'
    TEMPLATE = 'register_form.html'
    def get(self, request):
        print('这是处理 GET 请求的方法')
        register_form = forms.RegisterForm()
        return render(request, self.TEMPLATE, {'register_form': register_form})
复制代码

在 templates 文件夹中新增 register_form.html,并渲染后端传来的 Django Form

<form action="{% url 'register' %}" method="post">
    {% csrf_token %}
    {{ register_form.as_table }}
    <input type="submit" value="注册">
</form>
复制代码

重新启动应用,浏览器访问 /lima/register/

image.png

通过 Django Form 渲染出来的表单成功展示出来,修改视图类 Register 的 post 方法,获取 Django Form 提交的信息

class Register(View):
    # 其余代码保持不变
    def post(self, request):
        print('这是处理 POST 请求的方法')
        # username = request.POST.get('username')
        # password = request.POST.get('password')
        register_form = forms.RegisterForm(request.POST)
        username = register_form.cleaned_data.get("username")
        password = register_form.cleaned_data.get("password")
        print('Django 表单中传来的 username 为 {}, password 为 {}'.format(username, password))
        return render(request, self.TEMPLATE)
复制代码

在 Django Form 中填入数据并点击注册按钮,控制台成功输出Django Form 中提交的数据

image.png


相关文章
|
18天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
2天前
|
前端开发 数据库 数据安全/隐私保护
Django Form and ModelForm
Django Form and ModelForm
|
4天前
|
JavaScript 程序员 应用服务中间件
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
17 7
|
4天前
|
XML 存储 JavaScript
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(1)
15 5
|
2天前
|
存储 前端开发 JavaScript
探索Django:打造高效、可扩展的Web应用(中)
探索Django:打造高效、可扩展的Web应用(中)
6 1
|
4天前
|
中间件 开发者 C++
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用
|
4天前
|
前端开发 数据库 开发者
构建高效后端:Django框架在Web开发中的深度解析
**Django框架深度解析摘要** Django,Python的高级Web框架,以其快速开发和简洁设计备受青睐。核心特性包括Model-Template-View架构、ORM、模板引擎和URL路由。通过创建博客应用示例,展示从初始化项目、定义模型、创建视图和URL配置到使用模板的流程,体现Django如何简化开发,提高效率。其强大功能如用户认证、表单处理等,使Django成为复杂Web应用开发的首选。学习Django,提升Web开发效率。【6月更文挑战第24天】
33 1
|
17天前
|
前端开发 JavaScript 开发工具
Web网页前端教程免费:引领您踏入编程的奇幻世界
Web网页前端教程免费:引领您踏入编程的奇幻世界
17 3
|
18天前
|
JSON 安全 关系型数据库
Web实战丨基于django+hitcount的网页计数器
Web实战丨基于django+hitcount的网页计数器
27 5
|
2天前
|
SQL 关系型数据库 数据库
探索Django:打造高效、可扩展的Web应用(上)
探索Django:打造高效、可扩展的Web应用(上)
5 0