gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:51:56 24 4
gpt4 key购买 nike

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

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

# login.html
<html>
<head>
<title>Django Bookmarks - User Login</title>
</head>

<body>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password didn't match.
Please try again.</p>
{% endif %}
<form method="post" action=".">
{% csrf_token %}
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
</body>
</html>

基于booklogin.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 %}

谢谢

最佳答案

form.has_errors 未记录在 forms api 中。我对源代码进行了快速 grep,但在 Django 1.3 或 1.0.X 分支的 svn checkout 中都找不到它。您使用的书中似乎有一个错误。

检查form.errors在你的模板中就可以了。

如果您尝试在 View 中访问 form.has_errors,您将收到 AttributeError。然而,当尝试访问模板中不存在的变量时,Django 不会提示,因此 {{ form.has_errors }} 会默默地失败。请参阅 template variables 上的文档了解更多信息。

要自省(introspection)表单上的属性,请在表单对象上使用 dir,而不是 View 。

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

但是我建议您探索 form api而是使用文档。

使用 Django 时需要 csrf token cross site request forgery protection .

关于django - 如何找到 form.has_errors 或 form.errors 并首先启用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com