Django中的 forms 模块
其他
2020-02-09 17:33:31
阅读次数: 0
1、Django中的 forms 模块
- 1、forms 模块的作用
- 通过 forms 模块,允许将表单控件与python文件相结合
- 2、使用 forms 模块
- ①创建 forms.py 文件
- ②导入 forms 模块
- ③创建class,一个class对应一个表单,所有class需要继承自forms.Form
- ④在class中创建属性,一个属性对应一个表单控件
- 参考文档(Forms)
- 在Django中,HttpRequest被演变成了request封装到视图(views)处理函数中的作为参数,该参数,在调用视图处理函数时自动传参
from django import forms
TOPIC_CHOICES = (
('level1', "1星"),
('level2', "2星"),
('level3', "3星"),
('level4', "4星"),
('level5', "5星"),
)
class RemarkForm(forms.Form):
subject = forms.CharField(label='标题', initial='初始数据')
email = forms.EmailField(label='邮件')
message = forms.CharField(label='内容', widget=forms.Textarea)
topic = forms.ChoiceField(label='评价', choices=TOPIC_CHOICES)
save = forms.BooleanField(label='是否保存')
from django.shortcuts import render
from django.http import HttpResponse
from .forms import *
def remark_views(request):
form = RemarkForm()
return render(request, 'remark.html', locals())
from django.conf.urls import url
from django.contrib import admin
from .views import *
urlpatterns = [
url(r'^remark/$', remark_views, name='remark'),
]
- 3、在模板中解析form表单
- ①需要手动添加<form> </form>
- ②需要手动自定义提交按钮<p><input type=“submit” value=“提交”></p>
- ③处理方法可选手动解析和自动解析
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'remark' %}" method="post">
{% csrf_token %}
{% for field in form %}
<p>{{ field.label }}:{{ field }}</p>
{% endfor %}
<p><input type="submit" value="提交"></p>
</form>
<form action="{% url 'remark' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
</form>
</body>
</html>
- 4、在html中提交的扁担内容也可以传递给forms.Form
- ① 将post中的数据放在EntryForm中
- ② 判断当前数据是否通过验证,此步骤必须验证
- ③ 获取到提交的数据,并封装到一个字典中
- ④ 获取到提交的表单控件数据
from django.shortcuts import render
from django.http import HttpResponse
from .forms import *
from .modles import *
def remark_views(request):
if request.method == 'GET':
form = RemarkForm()
return render(request, 'remark.html', locals())
else:
form = RemarkForm(request.POST)
if form.is_valid():
data = form.cleaned_data
subject = data['subject']
email = data['email']
message = data['message']
topic = data['topic']
Entry(**data).save()
return HttpResponse(subject + email + message + topic)
- 5、forms 模块的高级处理
- 将Models 和 Forms 结合到一起使用,通过Models自动生成表单
- ① 创建 class EntryForm,并继承自forms.ModelForm
- ② 创建内部类 Meta ,并定义相关信息
- model:指定相关联的models
- fields :
- 指定一个列表, 声明允许生成表单控件的属性
- ‘_ all _’,表示全部属性允许被生成表单控件
- labels:取值为字典,{‘属性名’:‘显示文本’}
from django.db import models
class User(models.Model):
uname = models.CharField(max_length=30, verbose_name='用户名')
upwd = models.CharField(max_length=50, verbose_name='用户密码')
uage = models.IntegerField(verbose_name='用户年龄')
uemail = models.EmailField(verbose_name='用户邮箱')
from django import forms
from .models import *
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = '__all__'
labels = {
'uname':'用户名',
'upwd':'用户密码',
'uage':'用户年龄',
'uemail':'用户邮箱',
}
- 6、forms 模块的小部件
- ① 什么是小部件
- ② 常用的小部件
- TextInput:<input type=“text” >
- NumberInput:<input type=“number” >
- EmailInput:<input type=“email” >
- URLInput:<input type=“url” >
- PasswordInput:<input type=“password” >
- HiddenInput:<input type=“hidden” >
- CheckboxInput:<input type=“checkbox” >
- Textarea:<textarea></textarea>
- Select:<select></select>
- ③ 小部件的使用:
- 继承自forms.Form
- 继承自forms.ModelForm
from django import forms
from .models import *
class RemarkForm(forms.Form):
message = forms.CharField(
label='内容',
widget=forms.Textarea(
attrs={
'class':'form-control',
'placeholder': '请输入内容'
}
)
)
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = '__all__'
labels = {
'uname':'用户名',
'upwd':'用户密码',
'uage':'用户年龄',
'uemail':'用户邮箱',
}
widgets = {
'uname': forms.TextInput(attrs={
'class': 'form-control',
'palceholder': '请输入用户名'
}),
'upwd': forms.PasswordInput(),
'uage': forms.NumberInput(),
'uemail': forms.EmailInput(),
}
发布了75 篇原创文章 ·
获赞 87 ·
访问量 1万+
转载自blog.csdn.net/weixin_43883022/article/details/102598929