我想将未经身份验证的用户的访问重定向到登录页面,之后应将登录的用户重定向到最初请求的页面.
根据文档,使用@user_passes_test装饰器很容易实现.但似乎我必须装饰每个视图,这是疯狂的,有太多而且容易出错.
有什么好方法可以全局启用此功能(除了一小组固定视图,例如login)?也就是说,默认情况下,只需登录即可显式处理匿名查看.
我正在使用Django的身份验证,在login.html模板中,以下语句生成错误:
{% url 'django.contrib.auth.views.login' %}
Run Code Online (Sandbox Code Playgroud)
/ login时的TemplateSyntaxError
渲染时捕获NoReverseMatch:反向找到''django.contrib.auth.views.login'',其参数'()'和关键字参数'{}'未找到.
这个网址在我的urls.py中定义:
(r'^login$', 'django.contrib.auth.views.login')
Run Code Online (Sandbox Code Playgroud)
我安装了auth系统:
INSTALLED_APPS = (
'django.contrib.auth',
...
)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在尝试创建一个auth后端,以允许我的用户使用他们的电子邮件地址或Django 1.6中的用户名使用自定义用户模型登录.当我使用用户名登录时后端工作,但由于某种原因没有电子邮件.有什么我忘了做的事吗?
from django.conf import settings
from django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
"""
This is a ModelBacked that allows authentication with either a username or an email address.
"""
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, username):
try:
return User.objects.get(pk=username)
except User.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
编辑:建议我从ModelBackend继承并在我的设置中安装它在我的设置中我有这个AUTHENTICATION_BACKENDS =('users.backends','django.contrib.auth.backends.ModelBackend',)我已经将后端更改为这个:
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.auth.backends …Run Code Online (Sandbox Code Playgroud) 从管理员我看到您可以为用户或用户组分配权限,以允许:允许添加,更改或删除模型中的数据.
这很好,但我还需要允许用户或用户组访问或不访问一组视图.我在我的网站上有某种类型的服务,所以我想让一些用户访问某些服务(页面/视图)而不是其他用户.
那么如何允许某些用户/用户组访问某些视图?谢谢!
python django django-authentication django-permissions django-login
在我的 Django 应用程序中,用户即使在登录后也可以通过 URL 访问登录/注册页面。如何防止他们访问这些页面?
网址.py
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
app_name = 'account'
urlpatterns = [
path('signup/', views.register, name='register'),
path('', auth_views.LoginView.as_view(), name='login'),
]
Run Code Online (Sandbox Code Playgroud)
虽然我可以在views.py 中编写if-else 语句来检查经过身份验证的用户,但我没有在 views.py 中使用任何登录功能。我正在使用 django 的默认登录系统和一个authentication.py页面进行自定义登录(使用电子邮件地址进行身份验证)。
认证文件
from django.contrib.auth.models import User
class EmailAuthBackend(object):
"""
Authenticate using an e-mail address.
"""
def authenticate(self, request, username=None, password=None):
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
return None
except User.DoesNotExist:
return None
def …Run Code Online (Sandbox Code Playgroud) 我可以使用以下登录页面:/admin非员工用户登录吗?我在我的django设置文件中使用以下设置:
LOGIN_URL = '/admin/'
LOGIN_REDIRECT_URL = '/'
Run Code Online (Sandbox Code Playgroud)
当我登录时,它不会将我重定向到根文件夹.我是以正确的方式做到的吗?
注意:我@login_required在我的视图中使用装饰器.
编辑
它使用以下URL将我登录到管理站点: http://127.0.0.1:8000/admin/?next=/
我在我的应用程序中使用内置登录.有一些自定义后端或程序包来处理这个问题.但其中许多并不是我所期待的.
我在注册时通过django-registration制作了独特的电子邮件.现在我想要的只是在登录页面而不是用户名中询问电子邮件.
但如果我使用django电子邮件等自定义后端作为用户名,则在使用django-registration时会崩溃.
我不想更改所有身份验证后端,我只想更改登录页面.
在网站的其余部分,我将使用用户名.我在写自定义管理页面时pe:
welcome {{user}}
Run Code Online (Sandbox Code Playgroud)
它必须呈现用户名.不是电子邮件.
我需要找到出路.我卡住了.
谢谢.
django django-authentication django-registration django-login
我创建了两种不同类型的用户 - 卡车和公司。这是我的用户注册页面
注册后,有关用户是卡车还是公司的数据将进入数据库。
只需输入电子邮件和密码。在我的自定义用户创建表单中,我添加了字段 username = email。
当我尝试使用有效凭据登录时,该页面不会根据用户类型将我重定向到特定页面。相反,我在 login.html 中为无效凭据创建的错误正在引发 - “您的电子邮件和密码不匹配。请重试。”
这是我的代码:
视图.py:
def login_view(request):
title = "Login"
if request.method == 'POST':
form = LoginForm(data=request.POST)
email = request.POST.get('email', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=email, password=password)
if form.is_valid():
auth.login(request, user)
user_type = form.cleaned_data['Label']
if user.is_active & user_type == 'Truck':
return HttpResponseRedirect('/post_load/')
elif user_type == 'Company':
return HttpResponseRedirect('/live_deal/')
else:
form = LoginForm()
return render(request, 'registration/login.html', {'form' : form, 'title': title})
Run Code Online (Sandbox Code Playgroud)
网址.py:
# url(r'^login/$', views.login_view),
# url(r'^accounts/login/$', views.login_view), …Run Code Online (Sandbox Code Playgroud) django django-authentication django-login django-custom-user
我正在尝试通过命令提示符登录到 Django 帖子的管理员 url 创建超级用户。单击登录按钮后,我收到“Python 已停止工作”。
Python 版本:3.7.0 Django 版本:3.0
第 1 步:使用 django-admin 命令创建网站
第 2 步:使用 runserver 命令验证 Django 默认主页正在加载
第 3 步:尝试 admin/post 创建超级管理员用户。
第 4 步:点击 Post Login 按钮,显示“Python Stopped working”错误。
我试图解决这个问题但没有任何成功
from django.contrib.auth import authenticate
u = authenticate(username="username", password="password")
Run Code Online (Sandbox Code Playgroud)
尝试添加和删除SESSION_COOKIE_SECURE = False在settings.py
VerifedALLOWED_HOSTS = []在settings.py
我应该怎么做才能看到管理页面?