【问题标题】:Django rest framework - including url for authenticationDjango rest 框架 - 包括用于身份验证的 url
【发布时间】:2014-08-12 22:15:11
【问题描述】:

我在这里关注 DJango REST 框架教程:

http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions#adding-login-to-the-browsable-api

并且,在文件末尾添加一个模式以包含可浏览 API 的登录和注销视图。

urlpatterns += patterns('',
    url(r'^api-auth/', include('rest_framework.urls',
                               namespace='rest_framework')),
)

上面写着:

模式的 r'^api-auth/' 部分实际上可以是您的任何 URL 想用。唯一的限制是包含的 url 必须使用 “rest_framework”命名空间。

我不明白为什么会这样,即为什么字符串“api-auth”无关紧要,它似乎对正则表达式中的任何字符串 XXXX 都能正常工作

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    就像r'/admin' 一样,不管你给它起什么名字。在一般意义上,它只是一个字符串的映射,将 url 请求匹配到基于类或函数的视图。从概念上讲,它与下面的字典相同:

    {
     'add': lambda x, y: x + y,
     'subtract': lambda x,y: x - y
     ... ect. ...
    }
    

    除了在 Django 中,keys、addsubtract 是正则表达式 url 模式,'SomeView.as_view()'lambda 函数。像这样的:

    {
     r'^about/$': TemplateView.as_view(template_name='pages/about.html'),
     r'^admin/': include(admin.site.urls)
    }
    

    当您 include('rest_framework.urls') 时,您包括 Django Rest-Framework 自己的 url 模式到视图的映射,就像上面的 about 一样。你可以把它想象成一个嵌套的字典:

    {
     r'^about/$': TemplateView.as_view(template_name='pages/about.html'),
     r'^admin/': {
       r'^about/$': TemplateView.as_view(template_name='pages/about.html'),
       r'^admin/': include(admin.site.urls)
       }
    }
    

    有关 django 如何处理请求的更多信息,请参阅 django 文档here

    【讨论】:

    • 谢谢,我没有完全理解答案,我正在查找 lambda 函数部分。几个观察 - 首先,我发现 'api-auth' 字符串并非完全不相关,因为127.0.0.1:8000/api-auth/login 有一个独立的登录页面(我是侥幸找到的,没有记录),所以如果我把' api-auth'字符串为xxxx,我需要以127.0.0.1:8000/xxxx/login登录网址
    • 另外,我可以直接去127.0.0.1:8000/snippets,我确定在HTML的源代码中,在注销链接中,注销,xxxx也反映了——所以框架内部确实使用了我使用的url正则表达式字符串
    • @dowjones123 这些字符串根本不是无关紧要的。当您转到yoursite.com/yourstring 时,它将为您的视图生成的内容提供服务。你命名yourstring 并不重要,因为它可以是任何东西,它只是映射到你的视图的键。
    猜你喜欢
    • 2013-06-29
    • 2017-09-26
    • 2017-11-02
    • 1970-01-01
    • 2019-03-01
    • 2021-12-21
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多