[英]django rest framework — redirect to login with next parameter if authentication fails
当用户在没有正确身份验证的情况下访问页面时,如何使用 Django Rest Framework (v2.3.8) APIView
重定向到设置了next
url 参数的登录页面?
我完全确定马特现在已经意识到如何做到这一点,但是对于任何新检查这个问题的人,您可以使用与用于任何其他 django 视图相同的方法。 注意:此答案使用 django 1.11 url,对于 django 2+ url,您应该检查 django文档。
使用login_required
装饰器
# urls.py from django.contrib.auth.decorators import login_required from myapp import views urlpatterns += [ url(r'^my-url/', login_required(views.MyView.as_view()), name='my-name'), ]
使用LoginRequired
混合
# views.py from django.contrib.auth.mixins import LoginRequiredMixin class MyView(LoginRequiredMixin, APIView): ... # urls.py from myapp import views urlpatterns += [ url(r'^my-url/', views.MyView.as_view(), name='my-name'), ]
更多细节和示例可以在 django 文档中找到。
像那样?
from django.contrib.auth.decorators import login_required
urlpatterns = [
path('swagger/', login_required(schema_view.with_ui('swagger', cache_timeout=0)), name='schema-swagger-ui'),
]
<form class="form-horizontal" method="POST" action="">
{% csrf_token %}
<div class="form-group">
<div class="col-md-10">
{{ form.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/>
{% endif %}
<button class="btn btn-default" type="submit">{% trans "Sign In" %}</button>
</div>
</div>
</form>
要使用 DRF 的内置登录和注销视图/模板,请将rest_framework.urls
添加到顶级urls.py
文件中,如下所示:
urlpatterns += [
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
假设您安装了rest_framework
,这将访问其urls.py
文件并添加 rest_framework 命名空间。 如果你深入研究, rest_framework.urls
实际上看起来与任何其他urls.py
模式非常相似——它只是将rest_framework
模板与 Django 的内置登录和注销视图链接起来:
from django.conf.urls import url
from django.contrib.auth import views
template_name = {'template_name': 'rest_framework/login.html'}
urlpatterns = [
url(r'^login/$', views.login, template_name, name='login'),
url(r'^logout/$', views.logout, template_name, name='logout'),
]
rest_framework
默认模板的工作方式与任何其他登录一样 - 它将带有username
和password
字段的 POST 请求发送到api-auth/login
以验证您的用户数据库(假设您使用的是 Django 的 auth.User 模型)。 您还可以创建自己的登录模板(这将做同样的事情)。 我不会更改 DRF 文件,而是将代码混搭,以便我的顶级 urls.py 文件如下所示:
from django.conf.urls import url
from django.contrib.auth import views
template_name = {'template_name': 'custom_login.html'}
urlpatterns = [
url(r'^api-auth/login/$', views.login, template_name, name='login'),
url(r'^api-auth/logout/$', views.logout, template_name, name='logout'),
]
它仍然使用 Django 的内置登录和注销视图,但使用您自己的模板。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.