Django如何验证请求的URL与选择字段?

1 投票
2 回答
960 浏览
提问于 2025-04-16 22:37

我在写的一个应用程序中,有一个选择字段,用来表示某种车型。为了方便讨论,假设它的样子是这样的:

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]

你也可以把这个字典放在模型里,如果你愿意的话,可以直接导入使用。

撰写回答