零散知识点(一)
一、local_settings.py 文件中配置的是不给别人的信息,私有的信息,比如各种账号等。settings.py中的信息可以给测试,运维等,别人用自己的local_settings.py文件追加上去。
在setting.py的最后导入local_settings.py文件。
try: from .local_settings import * except ImportError: pass
二、ModelForm的简单使用
使用示范:
from django import forms
class XXModelForm(form.Modelform):
class Meta:
model = models.xxxxx 对应的是哪个表
fields = [username,...] 表示对列表中这些字段生效
# exclude = [.....] 表示除了列表中的这些字段,其他的字段都生效
ModelForm 相当于自动把数据库表中的字段对应成表单字段,也就是把数据库的字段转换成表单,这样,对要存入的数据验证,增删改查都可以在这个转换的表单里操作,不用直接连接数据库操作表。

1、ModelForm中可以对原有字段重写,可以新增字段,但是新增的字段不会保存到数据库表中。
2、form.is_valid() 验证
如果校验通过则 cleaned_data字典中存在的是字段名和对应的值 cleaned_data["xxx"]
3、验证过程:
先验证字段,然后在执行对应的钩子。比如,字段username验证通过,则执行函数clean_username(),这个方法验证成功值返回给cleaned_data["username"] ,不返回则cleaned_data["username"] 值为空。也可以返回个其他值。当所有的验证执行完则执行clean()方法。
添加验证失败信息的两种方法:
self.add_error('mobile_phone','手机号已经存在') from django.core.exceptions import ValidationError raise ValidationError('手机号已存在') #此方法特点:如果出错则在异常中处理,后面代码不再执行。

4、可以对初始化方法进行重新
def __init__(self,request,*args,**kwargs): super().__init__(*args,**kwargs) self.request = request
这样在初始化的时候可以传入request。
super().__init__(*args,**kwargs)表示调用父类方法,只使用此方法相当于什么也没做。
5、初始化时的操作
初始化时,会生成一个字典self.fields={},讲字段存在字典里。如下:
self.fields={
"username":charfield(..),
"email":charfield(...)
.......
}
6、modelform 中的 widget
widget是插件的意思
CharField(
widget=forms.PasswordInput() #表示此字段显示是以密码文本的方式。
)
field.widget.attrs["class"] = "{} form-control".format(old_class) 表示在field这个字段中增加一个属性class
field.widget.attrs.get('class','') 表示获取field这个插件的属性class
widgets的其他用法:
class Meta: model = models.Issues exclude = ['project','creator','create_datetime','latest_update_datetime'] #除了这些字段的其他字段
# fields = '__all__' ## 表示所有字段都生成form字段
# fields = [a,b,c,d....] 展现的字段按abcd...的顺序 widgets = { "assign":forms.Select(attrs={'class':'selectpicker','data-live-search':'true'}), "attention":forms.SelectMultiple(attrs={'class':'selectpicker','data-live-search':'true','data-actions-box':'true'}), "parent": forms.Select(attrs={'class': 'selectpicker', 'data-live-search': 'true'}), }
#可以在这里给字段(assign,attention,parent)定义插件样式。
浙公网安备 33010602011771号