如何使Django permission_required装饰器不将已登录的用户重定向到登录页面,但显示一些消息,如权限不足?
谢谢.
我有两个网站说foo.com和bar.com都是基于Django的.主要注册发生在foo.com上(我希望主要用户数据库在这里),我希望有三件事情发生:
1)登录foo.com的用户无需再次登录即可自动访问bar.com
2)直接登录bar.com的用户将通过foo.com用户db进行身份验证.
3)用户无需直接在bar.com注册.
我怎样才能做到这一点?如果它大大简化了我可以使bar.com成为foo.com的子域名(例如bar.foo.com),但它们必须是独立的站点.
我刚刚将我的django更新为1.4.但是当我尝试提交登录表单时出现以下错误:
禁止(403)CSRF验证失败.请求中止.失败原因:CSRF令牌丢失或不正确.
在我的settings.py(MIDDLEWARE_CLASSES)中,我不得不删除以下行,因为它现在已弃用:
'django.middleware.csrf.CsrfResponseMiddleware',
Run Code Online (Sandbox Code Playgroud)
而且我开始得到这个错误.
一些必要的信息:Urls.py
Run Code Online (Sandbox Code Playgroud)url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
MIDDLEWARE_CLASSES = (
'django.middleware.gzip.GZipMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# 'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
的login.html
{% extends "base.html" %}
{% block title %} Login {% endblock %}
{% block content %}
<div id="text">
<table>
<form action="" method="post">
{% csrf_token %}
<tr>
<td><label for="username">Email:</label></td>
<td><input type="text" name="username" value="" id="username"></td>
</tr>
<tr>
<td><label for="password">Password:</label></td>
<td><input type="password" name="password" value="" id="password"></td>
</tr>
<tr>
<td><input type="submit" value="Login" />
{% if next %}
<input type="hidden" name="next" …Run Code Online (Sandbox Code Playgroud) 如果我想确保一个视图被列为具有公共访问权限,是否有一个与@public_access等效的装饰器,它与@login_required相反,并且明确表示该视图应该始终可公开访问?
我想到的一个用例是自动向所有公共视图添加"@csrf_exempt",并在代码中清楚地表明视图应该是公共可访问的.
我有一个django应用程序,其中一个应用程序与UserProfile有多对多的关系.但每当我执行syncdb时,它都会警告我app_users是陈旧的字段
The following content types are stale and need to be deleted:
Apps | app_users
#settings.py
AUTH_PROFILE_MODULE = 'kprofile.UserProfile'
#Apps/models.py
class app(models.Model):
....
users = models.ManyToManyField(UserProfile)
Run Code Online (Sandbox Code Playgroud)
现在我不在视图中使用UserProfile,除了规则内的一些身份验证目的.并且UserProfile只能从管理界面附加到应用程序.如何阻止django syncdb给我这个错误/不正确的警告?
python django django-models django-admin django-authentication
我正在使用django-allauth作为我的一个项目.我想通过ajax实现登录/注册过程.我想要自定义注册表单.我正在通过他们的signupmixin和注册表单.听起来我可以为每个动作编写自定义视图并将其映射到url配置.我不确定最好的方法是什么.
非常感谢您对此的任何帮助或建议.
django django-forms django-views django-authentication django-allauth
我正在使用内置的django密码重置功能.文件说明:
如果系统中不存在提供的电子邮件地址,则此视图不会发送电子邮件,但用户也不会收到任何错误消息.这可以防止潜在攻击者泄露信息.如果要在这种情况下提供错误消息,可以继承PasswordResetForm并使用password_reset_form参数.
但是,在我的情况下,当用户尝试使用错误的用户名重置时显示错误消息更为重要.
我理解我需要做什么,但我不知道在子类化PasswordResetForm的表单中写什么.
子类化PasswordResetForm包含的表单应该包含什么?
谢谢.
文档:https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.login
当您手动登录用户时,必须在调用login()之前调用authenticate().authenticate()在用户上设置一个属性,注意哪个身份验证后端成功验证了该用户(有关详细信息,请参阅后端文档),稍后在登录过程中需要此信息.如果您尝试直接登录从数据库中检索的用户对象,则会引发错误.
那么为什么authenticate和login2个独立的功能呢?据我所知,authenticate只需验证登录信息即可.login将获取用户对象并设置cookie.我认为它们是分开的唯一原因是因为也许你可以放入不同的用户对象,比如用户有2个帐户合并.也许您想先验证电子邮件地址.这就是为什么它们是单独的功能login而不包装authenticate?
我正在尝试向创建用户添加自定义密码验证并更改密码管理表单.我没有在django文档中看到有关如何执行此操作的任何内容.我在SO上发现了这篇文章:使用django.contrib.auth.views.password_change强制执行密码强度要求,它提供了2个解决方案.我试过了两个,但都没有为我工作.
这是我现在在我的应用程序admin.py中的内容:
def validate_password_strength(value):
"""Validates that a password is as least 10 characters long and has at least
2 digits and 1 Upper case letter.
"""
min_length = 10
if len(value) < min_length:
raise ValidationError(_('Password must be at least {0} characters '
'long.').format(min_length))
# check for 2 digits
if sum(c.isdigit() for c in value) < 2:
raise ValidationError(_('Password must container at least 2 digits.'))
# check for uppercase letter
if not any(c.isupper() for c in value):
raise ValidationError(_('Password …Run Code Online (Sandbox Code Playgroud) 我的网站是一个用Django编写的数字市场网站.
默认情况下,网站上的数字内容(文本,图像,视频)处于"锁定"状态.只有购买这些内容的用户才能查看.
有一个故事,某个用户(谁购买了内容)免费向许多人赠送用户名/密码(例如,Facebook群组中有1000多人).然后,这1,000名用户可以使用该单一用户名/密码登录,并查看"锁定"的数字内容而无需支付一分钱.
是否可以限制同一帐户的并发登录次数?
我发现这个包裹:
https://github.com/pcraston/django-preventconcurrentlogins
但是当有人使用相同的用户名/密码登录时,它的作用是记录以前的用户.这无济于事,因为每个用户每次只需输入用户名/密码即可访问"锁定"内容.
django django-admin django-authentication django-sessions django-users
django ×10
django-admin ×3
django-forms ×2
python ×2
decorator ×1
django-1.7 ×1
django-csrf ×1
django-users ×1
django-views ×1