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


相关文章
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
5天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
53 20
|
3月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
157 62
|
3月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
269 45
|
4月前
|
网络安全 开发工具 数据安全/隐私保护
|
4月前
|
机器学习/深度学习 数据处理 数据库
基于Django的深度学习视频分类Web系统
基于Django的深度学习视频分类Web系统
86 4
基于Django的深度学习视频分类Web系统
|
3月前
|
API 数据库 开发者
深度剖析Django/Flask:解锁Web开发新姿势,让创意无限延伸!
在Web开发领域,Django与Flask如同两颗璀璨的星辰,各具特色。Django提供全栈解决方案,适合快速开发复杂应用;Flask则轻量灵活,适合小型项目和API开发。本文通过问答形式,深入解析两大框架的使用方法和选择策略,助你解锁Web开发新技能。
65 2
|
3月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
3月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
111 2
|
3月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
71 1

热门文章

最新文章

  • 1
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    21
  • 2
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    19
  • 3
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    53
  • 4
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    275
  • 5
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 6
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    37
  • 7
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    27
  • 8
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    20
  • 9
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    53
  • 10
    springSecurity学习之springSecurity过滤web请求
    59