Python Django应用程序,在项目级别具有用户身份验证
在项目级别处理用户身份验证时,如何处理应用程序内部的用户身份验证 我正在构建一个应用程序,在创建数据库条目时,我需要一个经过身份验证的用户对象,但我不想处理应用程序内部的整个注册/登录逻辑,而应该在项目级别进行深入研究 该应用程序需要用户登录,但在开发时,我不知道该将其放置在何处。我可以在settings.py中为项目“伪造”经过身份验证的用户吗 更新Python Django应用程序,在项目级别具有用户身份验证,python,django,authentication,Python,Django,Authentication,在项目级别处理用户身份验证时,如何处理应用程序内部的用户身份验证 我正在构建一个应用程序,在创建数据库条目时,我需要一个经过身份验证的用户对象,但我不想处理应用程序内部的整个注册/登录逻辑,而应该在项目级别进行深入研究 该应用程序需要用户登录,但在开发时,我不知道该将其放置在何处。我可以在settings.py中为项目“伪造”经过身份验证的用户吗 更新 我意识到我所要做的就是在我的所有视图中添加所需的@login_之后登录到/admin。然后,我将使用request.user获得所需的数据,并根
我意识到我所要做的就是在我的所有视图中添加所需的@login_之后登录到/admin。然后,我将使用request.user获得所需的数据,并根据Django auth system将models.ForeignKey(用户)添加到所需的模型中 如果您正在寻找限制登录用户访问的方法 使用
login\u required()
decorator:
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request):
#your code
默认情况下,根据Django auth system,在成功身份验证后,用户应重定向到的路径存储在一个名为“next”的查询字符串参数中,该参数在本例中是
my_view
,最后在用户登录后,用户对象连接到请求
如果您正在寻找限制登录用户访问的方法
使用login\u required()
decorator:
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request):
#your code
默认情况下,成功身份验证后用户应重定向到的路径存储在一个名为“next”的查询字符串参数中,该参数在本例中为my_view
,最后,在用户登录后,用户对象连接到请求没有默认方法伪造用户,但你可以自己轻松实现
您只需创建一个视图来登录硬编码用户
def force_login(request):
# this check is not really required, but probably a good idea
if not settings.DEBUG:
raise ImproperlyConfigured("Don't use the force_login view in production")
user, created = User.objects.get_or_create(
username='user',
defaults={...}) # set whatever defaults you need
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(request, user)
return HttpResponse('logged in')
现在您只需将此视图添加到url.py
。另一种方法是将其作为中间件编写
class ForceAuthenticationMiddleware(object):
"""
Ensures that the request has a logged in user.
If there is no user, it logs in a default user and return a
redirect.
"""
def process_request(self, request):
if request.user.is_authenticated:
return
user, created = User.objects.get_or_create(
username='user',
defaults={...}) # set whatever defaults you need
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(request, user)
return HttpResponseRedirect(request.get_full_path())
在'django.contrib.auth.middleware.AuthenticationMiddleware',
更新:我把这个答案变成了一个答案,并在上发布了中间件。没有默认的伪造用户的方法,但您可以自己轻松实现
您只需创建一个视图来登录硬编码用户
def force_login(request):
# this check is not really required, but probably a good idea
if not settings.DEBUG:
raise ImproperlyConfigured("Don't use the force_login view in production")
user, created = User.objects.get_or_create(
username='user',
defaults={...}) # set whatever defaults you need
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(request, user)
return HttpResponse('logged in')
现在您只需将此视图添加到url.py
。另一种方法是将其作为中间件编写
class ForceAuthenticationMiddleware(object):
"""
Ensures that the request has a logged in user.
If there is no user, it logs in a default user and return a
redirect.
"""
def process_request(self, request):
if request.user.is_authenticated:
return
user, created = User.objects.get_or_create(
username='user',
defaults={...}) # set whatever defaults you need
user.backend = settings.AUTHENTICATION_BACKENDS[0]
login(request, user)
return HttpResponseRedirect(request.get_full_path())
在'django.contrib.auth.middleware.AuthenticationMiddleware',
更新:我将此答案转换为a,并在上发布了中间件。您想在应用程序内部处理用户身份验证,而不必在此应用程序视图中编写登录代码吗?我将在视图中添加所需的@login\u,我需要获取用户模型,但在开发应用程序时,有一个虚拟用户就足够了,如果您想更多地检查用户,请根据需要创建自定义装饰器,您可以让装饰器检查此管理员是否。。。。Etcy你想在应用程序内部处理用户身份验证,而不必在此应用程序视图中编写登录代码?我将在视图中添加所需的@login_,我需要获取用户模型,但在开发应用程序时,有一个虚拟用户就足够了,如果您想更多地检查用户,请根据需要创建自定义装饰器,您可以让装饰器检查此管理员是否。。。。等等。我会将@login_required添加到我的视图中,我只是不想为了构建应用程序而构建处理创建帐户和登录用户的部分。我的应用程序将被添加到需要用户登录的应用程序中,该逻辑由项目处理,而不是我的app@kristiannissen是的,仅使用需要的登录名并指定登录urlonly@kristiannissen我重写了我的答案,希望这次能正确理解你的问题:)不完全正确。我会将@login_required添加到我的视图中,我只是不想为了构建应用程序而构建处理创建帐户和登录用户的部分。我的应用程序将被添加到需要用户登录的应用程序中,该逻辑由项目处理,而不是我的app@kristiannissen是的,仅使用需要的登录名并指定登录urlonly@kristiannissen我重写了我的答案,希望这次能正确理解你的问题:)