我试图弄清楚这些端点在django rest框架中是如何工作的。
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()),
]我得到以下模式:
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.为什么有两个登录端点?
我要做的是拥有以下端点:
我也不想创建重复的代码,似乎rest_framework附带了一些用于登录和输出的默认视图。我在堆栈溢出上看到的所有信息都建议创建新的视图classes...etc。但是,如果rest框架给了我一些我没有正确设置的默认设置,我为什么要这么做呢?在我看来,rest框架已经具备了我所需要的一切,但是我没有正确的urls.py设置。

编辑:
在将url模式更改为以下内容之后,我似乎得到了我想要的东西:
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模板,所以这可能不存在吗?
发布于 2022-01-27 02:40:33
不回答你的问题-这是我的解释。
据我所知,有三个登录网址-
localhost:8000/admin到您的管理面板时,它会带我们到http://localhost:8000/admin/login/?next=/admin/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)时,它有一些代码-
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错误。
path('rest-auth/', include('rest-auth.urls'))中包括project.urls,并且有url rest_auth/login。当您检查登录类的序列化程序时,它在那里使用了allauth。所以我们也得去找乐子。Allauth使我们可以通过用户名或电子邮件或两者管理登录,并做更多。https://stackoverflow.com/questions/70867775
复制相似问题