Django版本:2.1.3
Django表单非常强大,熟悉后可以大大提高工作效率。
Django表单分为两种使用方法:
- GET
- POST
GET方法:直接明文显示在URL中(如:https://docs.djangoproject.com/search/?q=forms&release=1
),通过URL处理数据,GET方法可以用来直接保存书签、分享或重新提交,但由于明文显示,故而数据不安全。
POST方法:浏览器会封装编码数据,进行传输,而且POST方法比GET方法传输内容支持更大。
Django中使用GET方法:
非常简单,举个栗子,访问url:http://127.0.0.1:8000/form/get_method/?a=21313&b=2323
,读取url中的GFT方法提供的a,b的数据。关键代码如下:
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('get_method/', views.get_method ),
]
views.py
from django.http import HttpResponse
def get_method(request):
if request.method == 'GET':
get_values = request.GET
a = get_values['a']
b = get_values['b']
str = "a value="+a+"<br/>b vlaue="+b
return HttpResponse(str)
判断是不是GET方法,然后读取GET的数据,像字典一样读值,非常简单吧!
GET方法效果
Django中使用POST方法:
POST方法是重点,需要理解和用的东西很多。
Django会处理涉及表单的三个不同部分:
- 准备并重组数据,以便下一步的渲染
- 为数据创建HTML 表单
- 接收并处理客户端提交的表单及数据
Django表单系统的核心组件是 Form类。它与Django模型描述对象的逻辑结构、行为以及它呈现给我们内容的形式的方式大致相同,Form 类描述一张表单并决定它如何工作及呈现。
再举个栗子,构建表单来获取用户的姓名:
在工程中新建forms.py文件:
from django import forms
class NameForm(forms.Form):
# name字段,我们要获取的字段
name = forms.CharField(label='姓名', max_length=100)
视图views.py文件:
from django.shortcuts import render
from django.http import HttpResponseRedirect,HttpResponse
from .forms import NameForm
def get_name(request):
if request.method == "POST":
form = NameForm(request.POST)
# is_valid():字段验证通过为True
if form.is_valid():
return HttpResponseRedirect('/thanks/')
else:
form = NameForm()
return render(request, 'form_test/name.html' ,{'form': form})
模板name.html文件:
<form action="/get_name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="提交姓名" />
</form>
效果如图:
HTML代码中的tr标签里所有部分都是Form类帮助我们生成的:
<form action="/get_name/" method="post">
<input type="hidden" name="csrfmiddlewaretoken" value="9mHZLHznXhfJTtRiUYRhVy9wyKC9gxH0QN17jzTNW70LLQYLqQxH86CZvqh5Q6sC">
<tr>
<th>
<label for="id_name">姓名:</label></th><td><input type="text" name="name" maxlength="100" required id="id_name">
</td>
</tr>
<input type="submit" value="提交姓名" />
</form>
Form中除了CharField
字段类型还有很多实用的类型:
- ChoiceField
字符串 - ChoiceField
- TypedChoiceField
- DateField
日期 - DateTimeField
日期+时间 - DecimalField
- DurationField
- EmailField
电子邮件类型 - FileField
文件类型 - FilePathField
文件路径 - FloatField
- ImageField
- IntegerField
- GenericIPAddressField
- MultipleChoiceField
- TypedMultipleChoiceField
- NullBooleanField
- RegexField
- SlugField
- TimeField
- URLField
- UUIDField
- MultiValueField
- SplitDateTimeField
网友评论