django form表单定制 密码怎么写

您现在的位置: -->
--> django中动态生成form表单
django中动态生成form表单
最近对django真是大爱呀,哈哈。公司有个需求是为一些素材动态生成属性字段,所以需要django来动态生成表单。
一开始的写法如下:
class AddObjForm(forms.Form): &&& id = forms.CharField() &&& def __init__(self, *args, **kwargs): &&&&&&& mdfields = copy.deepcopy(kwargs['mdfields']) &&&&&&& del kwargs['mdfields'] &&&&&&& super(AddObjForm, self).__init__(*args, **kwargs) &&&&&&& if mdfields is not None: &&&&&&&&&&& for f in mdfields: &&&&&&&&&&&&&&& exestr = "" &&&&&&&&&&&&&&& if f.showtype == 0: &&&&&&&&&&&&&&&&&&& exestr = 'self.'+f.name+"=forms.CharField()" &&&&&&&&&&&&&&& else: &&&&&&&&&&&&&&&&&&& exestr = 'self.'+f.name+"=forms.TextField()" &&&&&&&&&&&&&&& exec(exestr)
但是发现mdfields里面的字段并没有成功生成表单项,而是只有一个ID项。 于是研究了一下form的源码,其构造函数的源码如下:
class BaseForm(StrAndUnicode): &&& def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, &&&&&&&&&&&&&&&& initial=None, error_class=ErrorList, label_suffix=':', &&&&&&&&&&&&&&&& empty_permitted=False): & .... &&&&&&& self.fields = deepcopy(self.base_fields)
而其在生成html表单的时候,也都是从fields变量生成,所以这样试了一下:
class AddObjForm(forms.Form): &&& id = forms.CharField() &&& def __init__(self, *args, **kwargs): &&&&&&& mdfields = copy.deepcopy(kwargs['mdfields']) &&&&&&& del kwargs['mdfields'] &&&&&&& super(AddObjForm, self).__init__(*args, **kwargs) &&&&&&& if mdfields is not None: &&&&&&&&&&& for f in mdfields: &&&&&&&&&&&&&&& exestr = "" &&&&&&&&&&&&&&& if f.showtype == 0: &&&&&&&&&&&&&&&&&&& self.fields['name'] = forms.CharField() &&&&&&&&&&&&&&& else: &&&&&&&&&&&&&&&&&&& self.fields['name'] = forms.TextField()
果然就OK了,注意super一定要在我们后面的赋值之前,因为否则fields还没有生成……
OK,成果图如下:
PS: 一直使用C++编程,python带给我的是另一种完全不同的体验。 1.你要随时的利用python的动态性,要记住连代码也是可以动态生成 2.库的代码是可见的,你可以认为他封装的已经足够好,你也可以随时去看它的代码实现。(而不是去用man或者msdn)
觉得文章有用?立即:
和朋友一起 共学习 共进步!
建议继续学习:
QQ技术交流群:,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
作者:&&&&来源:
发布时间: 00:11:59
建议继续学习
近3天十大热文
rightLowest
& 2009 - 2017Django中实现的登录(模板,表单) - 简书
Django中实现的登录(模板,表单)
Django我自己的学习笔记,
此篇文章主要讲述了:
Django的 View,和其模板显示
Session的使用
表单与Post传递值
和之前一样,本文主要通过一个小程序的栗子来给大家展示。
这个例子主要是现了用户登录功能
在用户登录之后页面上显示登录成功与用户名
将用户信息记录进SESSION
以下就是栗子~
打开CMD,cd进入项目目录
django-admin.py startproject learn 新建一个项目工程并cd进入
python manage.py startapp learn新建一个应用
在Setting.py中添加learn这个应用
打开learn/views.py增加一个方法:from django.shortcuts import render
def home(request):
return render(request, 'home.html')
Django 模板系统,在app下面的templates文件夹中的模板文件。在learn下建立一个templates的文件夹,在其下建立一个home.html,里面内容为我们的登录界面。
03homehtml.PNG
将method改写成GET之后就可以通过上一节写过的Get获取值的办法来获得表单中的值。
编辑url,代码与正则如下:
03urls.PNG
尝试使用python manage.py runserver启动服务,浏览器输入http://127.0.0.1:8000/home/显示界面如下图:
03home.PNG
接着来进行Post的传值方式
我们来重写判定方法。首先更改home.html中&form method="post"&那么在views.py中,我们重写home方法,通过对其request.method的方法方式进行判定,来控制是执行显示还是执行对于数据的处理。代码如下(此代码中导入的From代码在步骤11处):
03home重写.PNG
我们需要在learn下,建立一个forms.py,使用Django的Forms类,代码如下:from django import forms
class Form(forms.Form):
username = forms.CharField()
password = forms.CharField()
同样,将模板home.html也改为:
03home重写.PNG
运行服务器,输入除去admin与admin的话,返回yaer,以外的值,返回warning。done!
03test.PNG
本篇文章的Git地址:
拖延癌已扩散的程序猿

我要回帖

更多关于 django form表单样式 的文章

 

随机推荐