内置表单
如果您不想使用内置视图,但希望不必为此功能编写表单,则身份验证系统会提供几个位于django.contrib.auth.forms中的内置表单(表11-1)。
内置的身份验证表单对他们正在使用的用户模型进行了一定的假设。 如果您使用自定义用户模型,则可能需要为认证系统定义自己的表单。
表11-1:Django的内置身份验证表单
表单名 | 描述 |
---|---|
AdminPasswordChangeForm | 管理界面中用于更改用户密码的表单。 将用户作为第一个位置参数。 |
AuthenticationForm | 用于记录用户的表单。将请求作为其第一个位置参数存储在表单实例中供子类使用。 |
PasswordChangeForm | 一种允许用户更改密码的表单。 |
PasswordResetForm | 用于生成并通过电子邮件发送一次性使用链接以重置用户密码的表单。 |
SetPasswordForm | 一种让用户在不输入旧密码的情况下更改密码的表单。 |
UserChangeForm | 管理界面中用于更改用户信息和权限的表单。 |
UserCreationForm | 用于创建新用户的表单。 |
模板中的验证数据
当您使用RequestContext时,当前登录的用户及其权限在模板上下文中可用。
用户
在呈现模板RequestContext时,当前登录的用户(User实例或AnonymousUser实例)存储在模板变量
{{user}}中:
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
如果没有使用RequestContext,则此模板上下文变量不可用。
权限
当前登录的用户权限存储在模板变量{{perms}}中。 这是django.contrib.auth.context_processors.PermWrapper的一个实例,它是一个模板友好的权限代理。 在{{perms}}对象中,单属性查找是User.has_module_perms的代理。 如果登录用户在foo应用程序中拥有任何权限,此示例将显示True:
{{ perms.foo }}
两级属性查找是User.has_perm的代理。 如果登录用户拥有foo.can_vote权限,此示例将显示True:
{{ perms.foo.can_vote }}
因此,您可以检查模板{%if%}语句中的权限:
{% if perms.foo %}
<p>You have permission to do something in the foo app.</p>
{% if perms.foo.can_vote %}
<p>You can vote!</p>
{% endif %}
{% if perms.foo.can_drive %}
<p>You can drive!</p>
{% endif %}
{% else %}
<p>You don't have permission to do anything in the foo app.</p>
{% endif %}
也可以通过{%if in%}语句中查看权限。 例如:
{% if 'foo' in perms %}
{% if 'foo.can_vote' in perms %}
<p>In lookup works, too.</p>
{% endif %}
{% endif %}
网友评论