博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
djangoform详解
阅读量:6533 次
发布时间:2019-06-24

本文共 3782 字,大约阅读时间需要 12 分钟。

orm表单的功能

  • 准备数据、重构数据,以便下一步提交。
  • 为数据创建HTML 表单
  • 接收并处理客户端提交的表单和数据

普通字段详解:

 
布尔值 checkbox
 
charFied input()
 
ChoiceField (select标签)
 
DateField Dateinput 标签
 
emailField EaillInput
 
FileField
 
ImageField
 
MultipleChoiceField (select标签 multiple)

处理关系的字段:

两个字段可用于表示模型之间的关系:ModelChoiceFieldModelMultipleChoiceField这两个字段都需要单个queryset参数,用于创建字段的选择。

 
ModelChoiceField
 
ModelMultipleChoiceField

表单里choice用的数据库里数据时不会实时更新。所以需要将choice放到init里,每次使用都执行一遍:

 
示例

字段的核心参数:

required

   f = forms.CharField(required=False)

  默认为True。

label

>>> from django import forms>>> class CommentForm(forms.Form):...     name = forms.CharField(label='Your name')...     url = forms.URLField(label='Your Web site', required=False)...     comment = forms.CharField()>>> f = CommentForm(auto_id=False)>>> print(f)Your name:Your Web site:Comment:

error_messages:

error_messages 参数让你覆盖字段引发的异常中的默认信息。传递的是一个字典,其键为你想覆盖的错误信息

has_changed():方法用于决定字段的值是否从初始值发生了改变。返回True 或False

字段数据:

不管表单提交的是什么数据,一旦通过调用is_valid() 成功验证(is_valid() 返回True),验证后的表单数据将位于form.cleaned_data 字典中。

from django.core.mail import send_mailif form.is_valid():    subject = form.cleaned_data['subject']    message = form.cleaned_data['message']    sender = form.cleaned_data['sender']    cc_myself = form.cleaned_data['cc_myself']    recipients = ['info@example.com']    if cc_myself:        recipients.append(sender)    send_mail(subject, message, sender, recipients)    return HttpResponseRedirect('/thanks/')

重写验证方法:

# 自定义方法(局部钩子),密码必须包含字母和数字  def clean_password(self):      if self.cleaned_data.get('password').isdigit() or self.cleaned_data.get('password').isalpha():          raise ValidationError('密码必须包含数字和字母')      else:          return self.cleaned_data['password']   def clean_valid_code(self):  # 检验验证码正确;之前生成的验证码保存在了了session中      if self.cleaned_data.get('valid_code').upper() == self.request.session.get('valid_code'):          return self.cleaned_data['valid_code']      else:          raise ValidationError('验证码不正确')   # 自定义方法(全局钩子, 检验两个字段),检验两次密码一致;  def clean(self):      if self.cleaned_data.get('password') != self.cleaned_data.get('password2'):          raise ValidationError('密码不一致')      else:          return self.cleaned_data   # 注意,上面的字典取值用get, 因为假如在clean_password中判断失败,那么没有返回值,最下面的clean方法直接取值就会失败s 

使用表单模:

  • {
    form.as_table }}
     以表格的形式将它们渲染在<tr> 标签中
  • {
    form.as_p }}
      将它们渲染在<p> 标签中
  • {
    form.as_ul }}
     将它们渲染在<li> 标签中

手工渲染字段:{

form.name_of_field }

{
{ form.non_field_errors }}
{
{ form.subject.errors }}
{
{ form.subject }}
{
{ form.message.errors }}
{
{ form.message }}
{
{ form.sender.errors }}
{
{ form.sender }}
{
{ form.cc_myself.errors }}
{
{ form.cc_myself }}

渲染表单的错误信息:{
form.name_of_field.errors }}

迭代表单的字段{

field }} 包含所有有用的属性

{% for field in form %}    
{
{ field.errors }} {
{ field.label_tag }} {
{ field }}
{% endfor %}

可重用的表单模板:

在表单保存到单独的模块,用includ标签来重用

{% include "form_snippet.html" %}# In form_snippet.html:{% for field in form %}    
{
{ field.errors }} {
{ field.label_tag }} {
{ field }}
{% endfor %}

widgets窗口小部件 

widgets.attr 设置标签属性

class CommentForm(forms.Form):    name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))    url = forms.URLField()    comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))>>> f = CommentForm(auto_id=False)>>> f.as_table()Name:Url:Comment:
生成form field对象,指定类型
from django.form impor widgets,fieldsxxxx = fields.CharField(widget=widgets.Textarea)
 
 

转载于:https://www.cnblogs.com/xc1234/p/8587320.html

你可能感兴趣的文章
LocalAlloc,VirtualAlloc,malloc,new的异同
查看>>
回调函数
查看>>
win7 x64 jdk1.7.0_51
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>
项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors
查看>>
JVM学习笔记(一)------基本结构
查看>>
活动目录之备份与恢复
查看>>
删除 Eclipse 的 configuration 目录
查看>>
MOXA的智能通信产品也大力支持WinCE.net了
查看>>
ActiveX开发知多少?
查看>>
你不得不知道的Visual Studio 2012(3)- 创建Windows应用程序
查看>>