零散知识点(一)

一、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)定义插件样式。

 

posted on 2020-10-16 10:07  大能猫不是猫  阅读(114)  评论(0)    收藏  举报