使用Django框架表單

使用Django框架表單

文章目錄

  • 使用Django框架表單
    • @[toc]
    • 1.使用Form類構建表單
    • 2.表單字段與Widget控件

1.使用Form類構建表單

【創建項目和應用】

PS C:\Users\ls> cd E:\Python\
PS E:\Python> django-admin.exe startproject FormSite
PS E:\Python> cd .\FormSite\
PS E:\Python\FormSite> django-admin.exe startapp formapp
PS E:\Python\FormSite> 

文件路徑【FormSite/formapp/forms.py】

from django import forms# Form Class : UserInfoForm
class UserInfoForm(forms.Form):username = forms.CharField(label='Your name', max_length=32)dep = forms.CharField(label='Your department', max_length=32)email = forms.EmailField(label='Your email', max_length=64)

【代碼分析】

通過CharField字段類型定義了一個表單字段username,對應于HTML表單form標簽中的“用戶名”文本輸入框。

通過CharField字段類型定義了一個表單字段dep,對應于HTML表單form標簽中的“部門”文本輸入框。

通過EmailField字段類型定義了一個表單字段email,對應于HTML表單form標簽中的“電子郵件”文本輸入框。

文件路徑【FormSite/formapp/views.py】

from django.shortcuts import render# Create your views here.
def index(request):return HttpResponse("This is formapp homepage.")# class : UserInfoForm
from .forms import UserInfoForm
# 創建表單視圖
def userinfo(request):# 如果這是一個post請求,那么我們需要處理表單數據if request.method == 'POST':# 創建一個表單實例并用請求中的數據填充form = UserInfoForm(request.POST)# 檢查表單是否有效if form.is_valid():# 按照要求處理表單中的數據context = {}context['uname'] = request.POST['username']context['udep'] = form.cleaned_data['dep']context['uemail'] = request.POST['email']# 重定向到一個新的URLreturn render(request, 'show_info.html', {'userinfo': context})# return HttpResponseRedirect("#")# 如果是GET(或其他任何方法),我們將創建一個空白表單else:form = UserInfoForm()# 在HTML模板中渲染表單return render(request, 'userinfo.html', {'form': form})

【代碼分析】

通過if條件語句判斷HTTP請求方法,如果為POST方法,則繼續執行后面代碼去接受用戶提交的數據;如果為GET方法,則直接跳轉到else,執行return,返回空的表單實例(form),讓用戶去錄入數據再進行提交。

先通過request獲取表單數據,再通過UserInfoForm表單類創建表單實例form。

通過if條件語句對表單實例form進行驗證,如果所有的表單字段均有效,則繼續執行下面的代碼。

通過request獲取表單字段數據,并保存在上下文變量context中。

將上下文變量context保存為字典類型變量userinfo,通過render()方法傳遞表單數據userinfo到新的頁面中進行顯示。

將表單實例form渲染到表單模板userinfo.html中。

文件路徑【FormSite/formapp/templates/userinfo.html】

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><link rel="stylesheet" type="text/css" href="/static/css/mystyle.css"/><title>Userinfo Form</title>
</head>
<body><h3>Userinfo Form</h3><form action="#" method="post">{% csrf_token %}{% for f in form %}{{ f.label }}:&nbsp;&nbsp;{{ f }}<br><br>{% endfor %}<input type="submit" value="Submit" /><br>
</form></body>
</html>

【代碼分析】

通過{% csrf_token %}模板標簽為表單增加防護功能。django框架自帶一個簡單易用的“跨站請求偽造防護”,當通過POST方法提交了一個啟用CSRF防護的表單時,必須在表單中使用模板標簽csrf_token。

通過{% for-endfor %}模板標簽遍歷表單實例form的每一項,并在頁面模板中顯示。

定義了表單提交按鈕

文件路徑【FormSite/formapp/templates/show_info.html】

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><link rel="stylesheet" type="text/css" href="/static/css/mystyle.css"/><title>Show Userinfo</title>
</head>
<body>
<p>userinfo (total):<br>{{ userinfo }}<br>
</p>
<p>userinfo (items):<br>{% for key,value in userinfo.items %}{{ key }}&nbsp;:&nbsp;{{ value }}<br>{% endfor %}
</p>
</body>
</html>

【代碼分析】

直接通過字典類型的上下文變量userinfo在頁面模板中輸出表單提交的數據信息。

通過{% for-endfor %}模板標簽遍歷字典類型的上下文變量userinfo中的每一項,并依次在頁面模板中進行顯示。

文件路徑【FormSite/formapp/urls.py】

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('userinfo/', views.userinfo, name='userinfo'),
]

文件路徑【FormSite/FormSite/urls.py】

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('formapp/', include('formapp.urls')),path('admin/', admin.site.urls),
]

文件路徑【FormSite/FormSite/settings.py】

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','formapp.apps.FormappConfig',
]

【測試表單應用】
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述


2.表單字段與Widget控件

文件路徑【FormSite/formapp/forms.py】

from django import forms# Form Class : UserInfoForm
class UserInfoForm(forms.Form):username = forms.CharField(label='Your name', max_length=32)dep = forms.CharField(label='Your department', max_length=32)email = forms.EmailField(label='Your email', max_length=64)# Form Class : ContactForm
class ContactForm(forms.Form):subject = forms.CharField(label='Subject', max_length=64)message = forms.CharField(label='Message', widget=forms.Textarea)sender = forms.EmailField(label='Sender', max_length=64)cc_myself = forms.BooleanField(required=False)

文件路徑【FormSite/formapp/views.py】

from django.shortcuts import render# Create your views here.
def index(request):return HttpResponse("This is formapp homepage.")# class : UserInfoForm
from .forms import UserInfoForm
# Create form view
def userinfo(request):# if this is a POST request we need to process the form dataif request.method == 'POST':# create a form instance and populate it with data from the request:form = UserInfoForm(request.POST)# check whether it's valid:if form.is_valid():# process the data in form.cleaned_data as requiredcontext = {}context['uname'] = request.POST['username']context['udep'] = form.cleaned_data['dep']context['uemail'] = request.POST['email']# redirect to a new URL:return render(request, 'show_info.html', {'userinfo': context})# return HttpResponseRedirect("#")# if a GET (or any other method) we'll create a blank formelse:form = UserInfoForm()# render form in HTML templatereturn render(request, 'userinfo.html', {'form': form})# class : ContactForm
from .forms import ContactForm
# Create form view
def contact(request):# if this is a POST request we need to process the form dataif request.method == 'POST':# create a form instance and populate it with data from the request:form = ContactForm(request.POST)# check whether it's valid:if form.is_valid():# process the data in form.cleaned_data as requiredcontext = {}subject = form.cleaned_data['subject']message = form.cleaned_data['message']sender = form.cleaned_data['sender']cc_myself = form.cleaned_data['cc_myself']recipients = ['kingwjz@hotmail.com']if cc_myself:recipients.append(sender)# send_mail(subject, message, sender, recipients)context['subject'] = subjectcontext['message'] = messagecontext['sender'] = sendercontext['cc_myself'] = cc_myself# redirect to a new URL:return render(request, 'show_contact.html', {'contact': context})# return HttpResponseRedirect("#")else:print(form.errors)print(form.errors.as_json())# if a GET (or any other method) we'll create a blank formelse:form = ContactForm()# render form in HTML templatereturn render(request, 'contact.html', {'form': form})

文件路徑【FormSite/formapp/templates/contact.html】

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><link rel="stylesheet" type="text/css" href="/static/css/mystyle.css"/><title>Contact Form</title>
</head>
<body><h3>Contact Form</h3><form action="#" method="post">{% csrf_token %}{% for f in form %}{{ f.label }}:&nbsp;&nbsp;{{ f }}<br><br>{% endfor %}<input type="submit" value="Submit" /><br>
</form></body>
</html>

文件路徑【FormSite/formapp/templates/show_contact.html】

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><link rel="stylesheet" type="text/css" href="/static/css/mystyle.css"/><title>Show Userinfo</title>
</head>
<body><h3>Contact Info</h3>
<p>contact (items):<br><br>{% for key,value in contact.items %}{{ key }}&nbsp;:&nbsp;{{ value }}<br><br>{% endfor %}
</p></body>
</html>

文件路徑【FormSite/formapp/urls.py】

from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),path('userinfo/', views.userinfo, name='userinfo'),path('contact/', views.contact, name='contact'),
]

【訪問測試】
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903022.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903022.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903022.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker配置mysql遇到的問題:網絡連接超時、啟動mysql失敗、navicat無法遠程連接mysql

目錄 1.網絡超時 方式1. 網絡連接問題 方式2. Docker鏡像源問題 方式3.使用國內鏡像源 2.啟動mysql鏡像失敗 3.navicat無法遠程連接mysql 1.網絡超時 安裝MySQL時出現超時問題&#xff0c;可能由多種原因導致&#xff1a; 方式1. 網絡連接問題 原因&#xff1a;網絡不穩定…

React 多語言國際化:實現多語言支持

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

Claude系列模型-20250426

文章目錄 Claude 3.7 Sonnet - "Our most intelligent model yet"Claude 3.5 Haiku - "Fastest model for daily tasks"Claude 3.5 Sonnet (Oct 2024)Claude 3 Opus總結Claude 3.7 Sonnet - “Our most intelligent model yet” 特點: 這是目前Claude系列…

Linux查看可用端口號碼命令

在Linux系統中&#xff0c;有多種命令可用于查看可用端口號碼&#xff0c;下面為你詳細介紹&#xff1a; 1. 使用netstat命令 netstat是一個功能強大的網絡工具&#xff0c;可用于顯示網絡連接、路由表和網絡接口等信息。你可以結合不同的選項來查看端口使用情況。 查看所有…

leetcode201.數字范圍按位與

找到公共前綴部分&#xff0c;然后后面的部分全0 class Solution {public int rangeBitwiseAnd(int left, int right) {int offset 0;while (left ! right) {offset;left left >> 1;right right >> 1;}return right << offset;} }

端到端自動駕駛的數據規模化定律

25年4月來自Nvidia、多倫多大學、NYU和斯坦福大學的論文“Data Scaling Laws for End-to-End Autonomous Driving”。 自動駕駛汽車 (AV) 棧傳統上依賴于分解方法&#xff0c;使用單獨的模塊處理感知、預測和規劃。然而&#xff0c;這種設計在模塊間通信期間會引入信息丟失&am…

021-C語言文件操作

C語言文件操作 文章目錄 C語言文件操作1. 文件的概念2. 二進制文件和文本文件3. 文件的打開和關閉3.1 流和標準流3.1.1 流3.1.2 標準流 3.2 文件指針3.3 文件的打開和關閉 4. 文件的順序讀寫4.1 順序讀寫函數4.2 對比兩組函數4.2.1 scanf/fscanf/sscanf4.2.2 printf/fprintf/sp…

如何使用@KafkaListener實現從nacos中動態獲取監聽的topic

1、簡介 對于經常需要變更kafka主題的場景&#xff0c;為了實現動態監聽topic的功能&#xff0c;可以使用以下方式。 2、使用步驟 2.1、添加依賴 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactI…

《TCP/IP詳解 卷1:協議》之第七、八章:Ping Traceroute

目錄 一、ICMP回顯請求和回顯應答 1、ICMP回顯請求 2、ICMP回顯應答 二、ARP高速緩存 三、IP記錄路由選項&#xff08;Record Route&#xff0c;RR&#xff09; 1、記錄路由選項的工作過程 2、RR 選項的 IP 頭部格式 2.1、RR 請求 2.2、RR響應 四、ping 的去返路徑 五…

30天通過軟考高項-第四天

30天通過軟考高項-第四天 任務&#xff1a;項目進度管理 思維導圖閱讀 知識點集錦閱讀 知識點記憶 章節習題練習 知識點練習 手寫回憶ITTO 聽一遍喜馬拉雅關于范圍的內容 進度管理-背 1. 過程定義 龜腚排池至控 規劃進度管理&#xff1a;為了規劃、編制、管理…

根據JSON動態生成表單表格

根據JSON動態生成表單表格 一. 子組件 DynamicFormTable.vue1,根據JSON數據動態生成表單表格,支持表單驗證JS部分1.1,props數據1.2,表單數據和數據監聽1.3,自動驗證1.4,表單驗證1.5,獲取表單數據1.6,事件處理1.7,暴露方法給父組件2,HTML部分二,父組件1, 模擬數據2,…

【趙渝強老師】快速上手TiDB數據庫

從TiDBv4.0起&#xff0c;提供了包管理工具TiUP&#xff0c;負責管理TiDB、PD、TiKV等組件。用戶只需通過TiUP命令即可運行這些組件&#xff0c;顯著降低了管理難度。TiUP程序只包含少數幾個命令&#xff0c;用來下載、更新、卸載組件。TiUP通過各種組件來擴展其功能。組件是一…

springboot入門-DTO數據傳輸層

在 Spring Boot 應用中&#xff0c;DTO&#xff08;Data Transfer Object&#xff0c;數據傳輸對象&#xff09; 是專門用于在不同層&#xff08;如 Controller 層、Service 層、外部系統&#xff09;之間傳輸數據的對象。它的核心目的是解耦數據模型和業務邏輯&#xff0c;避免…

安裝docker,在docker上安裝mysql,docker上安裝nginx

目錄 一.安裝docker 1.1查看Linux版本的命令這里推薦兩種&#xff1a; 1.2查看內核版本有三種方式&#xff1a; 2.安裝 2.1 如果之前安裝了docker&#xff0c;先刪除舊版本的doker 2.2 安裝需要的軟件包&#xff0c;yum-util提供yum-config-manager功能&#xff0c;另外兩…

Android killPackageProcessesLSP 源碼分析

該方法用于終止指定包名/用戶ID/應用ID下符合條件的應用進程&#xff0c;涉及多進程管理、資源凍結、進程清理及優先級更新等操作。核心流程分為進程篩選、資源凍結、進程終止與資源恢復三個階段。 /*** 從已排序的進程列表中&#xff0c;提取從指定起始索引 startIdx 開始的連…

openAICEO山姆奧特曼未來預測雄文之三個觀察

《三個觀察》 山姆奧特曼 這篇文章主要講的是關于AGI&#xff08;人工通用智能&#xff09;的未來發展及其對社會的影響&#xff0c;用大白話總結如下&#xff1a; 核心觀點&#xff1a; AGI是什么&#xff1f; AGI是一種能像人類一樣解決各種復雜問題的智能系統&#xff0c;比…

部署yolo到k230教程

訓練&#xff1a;K230 借助 AICube部署AI 視覺模型 YOLO等教程_嘉楠 ai cube多標簽分類-CSDN博客K230模型訓練ai cube報錯生成部署文件異常_aicube部署模型顯示生成部署文件異常-CSDN博客 部署&#xff1a; # 導入必要的庫和模塊 import os import ujson # 超快的JS…

Flask 應用封裝成 Docker 服務的完整技術指南

一、實現原理 容器化核心邏輯 Docker 通過將應用代碼、運行環境和依賴項打包成鏡像&#xff0c;實現環境一致性。Flask 應用容器化需包含&#xff1a; Python 基礎運行環境項目代碼及依賴庫&#xff08;requirements.txt&#xff09;WSGI服務器&#xff08;如 Gunicorn&#xf…

windows上的 Vmware Workstation 環境搭建

本文的視頻版本&#xff1a;https://www.bilibili.com/video/BV1JhLRzyESh Vmware Workstation 是一款跨平臺的桌面級虛擬化軟件&#xff0c;可以使用 Vmware 創建虛擬機&#xff0c;我們一般使用 Linux 虛擬機&#xff08;目前主流的 Linux 發行版是 Ubuntu&#xff09;&…

Linux下終端命令行安裝常見字體示例

一、準備工作&#xff1a; 準備好要安裝的字體文件&#xff0c;如宋體、微軟雅黑&#xff08;simsun.ttc、msyh.ttc)。進入字體路徑&#xff1a; /usr/share/fonts&#xff0c;使用root權限&#xff0c;新建一個目錄shell_fonts。 二、命令行安裝字體&#xff1a; 將要安裝…