当前位置:  开发笔记 > 编程语言 > 正文

如何找到form.has_errors或form.errors并首先启用错误

如何解决《如何找到form.has_errors或form.errors并首先启用错误》经验,为你挑选了1个好方法。

为了清楚起见,我有几个相关问题,并在一个主题下发布.

# Django/django_bookmarks/urls.py    
urlpatterns = patterns('',
    (r'^$', main_page),
    (r'^user/(\w+)/$', user_page),
    (r'^login/$', 'django.contrib.auth.views.login'),
)    

# login.html

  
    Django Bookmarks - User Login
  

  
    

User Login

{% if form.errors %}

Your username and password didn't match. Please try again.

{% endif %}
{% csrf_token %}

{{ form.username }}

{{ form.password }}

根据这本书,login.html使用form.has_errors而不是form.errors.但是,form.has_errors即使输入错误的用户/密码,也不会打印任何警告消息.经过一番调查后,我将其更改为form.errors适用于我的工作.

问题1>应该使用哪一个form.errorsform.has_errors

问题2>如果form.has_errors不起作用,为什么django首先不抱怨.这本书是为Django 1.0编写的,我使用的是Django 1.3.这是什么原因?

问题3>如何检查表单具有哪些属性?我尝试过以下内容并没有提供我需要的信息.

python manage.py shell
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import django.contrib.auth.views
>>> dir(django.contrib.auth.views)
['AuthenticationForm', 'HttpResponseRedirect', 'PasswordChangeForm', 'PasswordResetForm', 'QueryDict', 'REDIRECT_FIELD_NAME', 'RequestContext', 'SetPasswordForm', 'User', '_', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'auth_login', 'auth_logout', 'base36_to_int', 'csrf_protect', 'default_token_generator', 'get_current_site', 'login', 'login_required', 'logout', 'logout_then_login', 'never_cache', 'password_change', 'password_change_done', 'password_reset', 'password_reset_complete', 'password_reset_confirm', 'password_reset_done', 'redirect_to_login', 'render_to_response', 'reverse', 'settings', 'urlparse']
>>>
>>> dir(django.contrib.auth.views.login)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']

问题4>何时需要以下声明?

{% csrf_token %}

谢谢



1> Alasdair..:

form.has_errors未在表单api中记录.我快速查看了源代码,我无法在Django 1.3或1.0.X分支的svn checkout中找到它.在你正在使用的书中,这似乎是一个错误.

form.errors入你的模板很好.

如果你试图form.has_errors在视图中访问,你会得到一个AttributeError.但是,当尝试访问模板中不存在的变量时,Django不会抱怨,因此{{ form.has_errors }}无声地失败.有关详细信息,请参阅模板变量的文档.

要自省表单上的属性,请使用dir表单对象而不是视图.

>>> from django.contrib.auth.views import AuthenticationForm
>>> dir(AuthenticationForm)

但是我建议你去探索api文档.

当您使用Django的跨站点请求伪造保护时,需要csrf令牌.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有