Django如何验证请求的URL与选择字段?
我在写的一个应用程序中,有一个选择字段,用来表示某种车型。为了方便讨论,假设它的样子是这样的:
MANUFACTURERS = (
('sk','skoda')
('vw','volkswagen')
)
class car(models.Model):
manufacturer = models.CharField(max_length='2', choices=MANUFACTURERS)
现在,我想创建一个视图,列出某个制造商的所有汽车。我已经把这个视图设置成可以通过网址传入制造商的参数,但问题是我需要验证这个制造商的缩写是否是有效的,比如 'sk' 或 'vw'。
最开始,我采用了一种比较笨的方法,先导入了一个叫做 MANUFACTURERS 的常量,然后创建了一个缩写的列表,检查给定的值是否在这个列表中。接着又遍历 MANUFACTURERS 常量来获取完整的名称。
for manufacturer in MANUFACTURERS:
manufacturers.append(manufacturer[0])
if url_given_mfn in manufacturers:
continue
else:
raise Http404
这样做实在是太麻烦了,有没有更好的解决办法呢?
2 个回答
0
我建议你使用Django的表单功能来实现这个。
from django.forms.widgets import RadioSelect
from model import MANUFACTURERS
class manufacturerTypeForm(forms.Form):
manufacturer = forms.ChoiceField(required = True, label= 'License Type', widget=RadioSelect(), choices=MANUFACTURERS)
在视图中,你只需要验证这个表单。如果验证通过,就保存数据;如果不通过,就显示错误信息。
2
我会把可能的制造商做成一个字典,比如:
from mymodel import MANUFACTURERS
mdict = dict(MANUFACTURERS)
def myview(request, manufacturer):
if not (manufacturer in mdict):
raise Http404
#--> do what you need to do
这样你就可以通过键(也就是缩写)来查找信息,如果你想获取对应的值,只需要这样做:
mdict[manufacturer]
你也可以把这个字典放在模型里,如果你愿意的话,可以直接导入使用。