更好的request.GET多个表单字段?

时间:2016-08-11 06:32:40

标签: python django

现在我有这个我有3个字段的地方:

<form action="/calc/" method="get">
    <input type="text" name="pv">
    <input type="text" name="n">
    <input type="text" name="r">
    <input type="submit" value="Search">
</form>   

我正如此定义:

def calc(request):
    if 'pv' in request.GET and 'n' in request.GET and 'r' in request.GET:
        pv = request.GET['pv']
        n = request.GET['n']
        r = request.GET['r']
        return render(request, 'main/index.html',
            {
                'pv': pv,
                'n': n,
                'r': r,
            })
    return render(request, 'main/index.html')

是否有更好/更短的方式来编写if条件语句?而不是写'如果'pv'和'n'和'r'等...?

2 个答案:

答案 0 :(得分:1)

您可以使用if all(x in request.GET for x in ['pv', 'n', 'r']):

.get

但是,如果没有全部3,有人会打电话给这个网址吗?可能值得一试。

您可以使用.get字典查找并提供不存在的默认值,request.GET.get('pv') request.GET.get('pv', 'default') 默认情况下将返回None

 _errorListProvider.Tasks.Add(new ErrorTask
            {
                Category = TaskCategory.User,
                ErrorCategory = category,
                HelpKeyword = "Automation Id Help text",
                Line = 12,
                Column = 12,
                Text = message
            });

此外,您不应直接引用它们,而应该只创建一个表单,让django为您处理所有这些。

答案 1 :(得分:1)

我建议使用Django Form类。 https://docs.djangoproject.com/en/1.10/topics/forms/

beedo.py

并在视图中创建此CalcForm的实例以在模板中呈现。

from django import forms

class CalcForm(forms.Form):
    pv = forms.CharField(max_length=100)
    n = forms.CharField(max_length=100)
    r = forms.CharField(max_length=100)

这里的优点是Django会为您进行验证。如果您的函数访问数据库,Django也会阻止SQL注入。