首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的Django rest框架urls.py中有重复的视图?

为什么我的Django rest框架urls.py中有重复的视图?
EN

Stack Overflow用户
提问于 2022-01-26 17:31:50
回答 1查看 155关注 0票数 0

我试图弄清楚这些端点在django rest框架中是如何工作的。

代码语言:javascript
复制
urls.py
urlpatterns = [
    path('api-auth', include('rest_framework.urls', namespace='rest_framework')),
    path('login', django_views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'),
    path('logout', django_views.LogoutView.as_view(), name='logout'),
    path('register', views.UserCreate.as_view()),
    path('get_jwt_token', obtain_jwt_token),
    path('eos_verify_jwt_token', views.EOSVerifyJSONWebToken.as_view()),
]

我得到以下模式:

代码语言:javascript
复制
Using the URLconf defined in ugh_studios_webservices.urls, Django tried these URL patterns, in this order:

    api/ api-auth login/ [name='login']
    api/ api-auth logout/ [name='logout']
    api/ login [name='login']
    api/ logout [name='logout']
    api/ register
    api/ get_jwt_token
    api/ eos_verify_jwt_token
    admin/

The current path, api/api-auth, didn’t match any of these.

为什么有两个登录端点?

我要做的是拥有以下端点:

  1. 登录端点
  2. 注销终结点
  3. 用户注册端点
  4. JWT令牌请求+验证端点--这似乎有效。
  5. 自定义验证用户登录(用户名+密码)端点(响应需要自定义以便与单独的应用程序集成,它需要一个特定的响应体)
  6. 需要在可浏览的API https://www.django-rest-framework.org/topics/browsable-api/中查看-为什么除了“寄存器”url之外,我的url都不能查看?
  7. 需要能够处理HTTP请求(用于验证/登录)以及html模板/视图

我也不想创建重复的代码,似乎rest_framework附带了一些用于登录和输出的默认视图。我在堆栈溢出上看到的所有信息都建议创建新的视图classes...etc。但是,如果rest框架给了我一些我没有正确设置的默认设置,我为什么要这么做呢?在我看来,rest框架已经具备了我所需要的一切,但是我没有正确的urls.py设置。

编辑:

在将url模式更改为以下内容之后,我似乎得到了我想要的东西:

代码语言:javascript
复制
urlpatterns = [
    path('', include('rest_framework.urls', namespace='rest_framework')),
    path('register', views.UserCreate.as_view()),
    path('get_jwt_token', obtain_jwt_token),
    path('eos_verify_jwt_token', views.EOSVerifyJSONWebToken.as_view()),
]

但是,我仍然需要弄清楚如何让登录直接到正确的urls。在登录后,它似乎重定向到/accounts/profile。不过,我没有看到默认的html模板,所以这可能不存在吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-27 02:40:33

不回答你的问题-这是我的解释。

据我所知,有三个登录网址-

  1. 当我们访问localhost:8000/admin到您的管理面板时,它会带我们到http://localhost:8000/admin/login/?next=/admin/
  2. 当我们安装了rest框架,并且在我们的project.url文件中包含了rest框架url,比如path('api-auth/', include('rest_framework.urls')),当我们检查rest框架包时,它有一个urls.py文件,包含一个登录url- path('login/', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'),这个LoginView来自- django/contrib/auth/views

现在,当您检查这个类(LoginView)时,它有一些代码-

代码语言:javascript
复制
def get_success_url(self):
    url = self.get_redirect_url()
    return url or resolve_url(settings.LOGIN_REDIRECT_URL)

默认情况下,login_redirect_url的值是'/accounts/profile/',请检查。因此,您被重定向到那里,您可以在设置中更改值。

现在,我们可以使用url直接登录到api端点,如localhost:8000/api-auth/login/ (rest框架登录),但是当我们尝试通过前端客户端登录时,例如使用基于令牌的身份验证的react应用程序,我们就会得到这个url的CSRF错误。

  1. 现在,要使用令牌身份验证系统登录,我们需要rest。(这将生成一个令牌)。我们再次必须在我们的path('rest-auth/', include('rest-auth.urls'))中包括project.urls,并且有url rest_auth/login。当您检查登录类的序列化程序时,它在那里使用了allauth。所以我们也得去找乐子。Allauth使我们可以通过用户名或电子邮件或两者管理登录,并做更多。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70867775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档