Django 开发过程中问题
2018-08-16 本文已影响0人
vckah
- choice 选项问题
例如在 model 中定义的是choices = ((1, 'xx'), (2, 'sdf'), (3, 'zzz'))
那么在模板中显示xx
,sdf
,zzz
怎么显示呢?不能直接.<field>
,这样会直接显示1 2 3 这些值,那么可以使用 get_字段_display 来显示。 - form 中字段验证问题
def clean(self):
password = self.cleaned_data.get('password ')
re_password = self.cleaned_data.get('re_password ')
if re_password and re_password != password:
self.add_error('re_password', ValidationError("两次密码不一致"))
else:
return self.clean_data
注意:全局验证的时候需要返回
self.cleaned_data
,局部例如def clean_username
时候需要返回字段的名称。
- 关于时间分组问题
当需要对时间进行分组时
ret = models.xxx.objects.all.extra(
select={“x”: “date_format(create_time, '%%Y-%%m')”}
).values('c').annotate(x=Count('id')).values('c', 'x')
- 关于文本输入框中 xss 攻击问题
做字符串截取的时候,需要利用到bs4
模块
from bs4 import BeautifulSoup as bs
html = bs(content, 'lxml')
desc = html.text[0:150]
过滤非法标签
for tag in html.find_all():
if tag.name in ['script', 'link']:
# 删除此标签
tag.decompose()
# 或者可以使用 replace_with() 替代
- form select 选择问题
# 静态字段
user_type=fields.ChoiceField(
choices=[(1,"普通用户"),(2,"超级用户")],
widget=widgets.Select,
)
# 数据库中取字段,但是数据库更改后不会同步
user_type=fields.ChoiceField(
choices=models.UserType.objects.all().values_list("id","name"),#要返回元组列表
widget=widgets.Select,
)
# 同步数据库,重新写 __init__ 方法
在 form 中
user_type=fields.ChoiceField(
choices=models.UserType.objects.all().values_list("id","name"),
widget=widgets.Select,
)
def __init__(self,*args,**kwargs):
super(UserInfoForm,self).__init__(*args,**kwargs)
self.fields["user_type"].choices=models.UserType.objects.all().values_list("id","name")
- 过期 session
Django 对于过期的 session 并不会自动清除,所以需要手动清除,可以设置一个定时任务。
命令:python manage.py clearsessions