我有一个"在野外"的形式,它采用了许多不同的变量 - 可能会也可能不会填充.
try:
app_version = request.REQUEST["appVersion"]
except:
app_version = ''
try:
app_name = request.REQUEST["appName"]
except:
app_name = ''
try:
app_code_name = request.REQUEST["appCodeName"]
except:
app_code_name = ''
Run Code Online (Sandbox Code Playgroud)
有没有更严格的方法来实现这一目标?
mip*_*adi 11
app_version = request.REQUEST.get("appVersion", "")
Run Code Online (Sandbox Code Playgroud)
get(key, default)是一个在Python上实现的方法dicts.如果密钥存在于字典中,则返回其值; 如果密钥不存在,则返回指定的默认值.在Django中,request对象是类字典对象,因此get也以相同的方式为它们定义.
如果这些变量用于填充表单,则可以安全地将request.POST对象直接传递给表单构造函数.
if request.method == 'POST':
form = MyForm(request.POST)
Run Code Online (Sandbox Code Playgroud)
表单将自动将正确的值传递给正确的表单字段,并使用不存在的键的默认值,并仍然为缺少的键创建空白字段(请参阅附录).
如果您正在尝试处理表单,最好如上所述创建表单对象,并从该对象中读取值.
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
# You may process these variables here
print form.appVersion
print form.appName
print form.appCodeName
Run Code Online (Sandbox Code Playgroud)
请记住,验证代码也最好放在表单类中.这样,如果form.is_valid()返回True,那么您知道您有一个干净的数据集可供使用.
注意:Django文档建议使用request.POST或request.GET直接使用而不是合并变量request.REQUEST,因为它更明确.
附录:
在这种情况下,理解绑定和未绑定表单之间的区别非常重要.如果使用创建未绑定的表单form = MyForm(),则在实例化表单时,它将使用initial每个字段的属性(如果存在)填充所有字段.例如,使用此代码:
from django import forms
class MyForm(forms.Form):
appVersion = forms.CharField(initial='1.0')
appName = forms.CharField()
appCodeName = forms.CharField()
Run Code Online (Sandbox Code Playgroud)
表单将使用值为"1.0"的appVersion进行初始化.但是,如果将POST请求绑定到这样的表单:form = MyForm(request.POST),则忽略初始属性.这意味着如果POST dict不包含appVersion键,那么该字段将留空.只要不需要该字段,您的表单仍将验证,您可以form.appVersion在验证后在视图中进行修改.
如果您有许多字段,则更紧凑的版本可能是:
defaults = { 'field1' : 'val1', 'field2' : 'val2', ...}
defaults.update(request.POST)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6193 次 |
| 最近记录: |