【问题标题】:Separate POST access urls for same resource同一资源的单独 POST 访问 url
【发布时间】:2016-01-14 09:48:41
【问题描述】:

我需要为用户创建和用户身份验证创建单独的 POST 方法

例如:http://localhost:8000/registerUser 使用电子邮件、姓名和密码来注册用户和另一个 url

eg:http://localhost:8000/authenticateUser 使用邮箱和密码验证用户身份

我可以通过覆盖“override_url”或“dispatch”方法来做到这一点吗?或者其他方式

【问题讨论】:

  • 你为什么不只创建2个资源?
  • 数据相同的情况下创建2个资源有没有意义?
  • authenticateUser 是做什么的? REST 身份验证发生在标头中。

标签: django tastypie


【解决方案1】:

我认为,您正在寻找的是prepend_url 函数,请参阅here。你可以这样使用它:

class AuthenticateUser(Resource)

    class Meta:
        resource_name = "authenticateUser"

    def prepend_urls(self):
        #add the cancel url to the resource urls
        return [
            url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/register%s$" %
                (self._meta.resource_name, trailing_slash()),
                self.wrap_view('register'), name="api_authenticate_register"),
        ]

    def register(self, request, **kwargs):
        # check request
        self.method_check(request, allowed=['post'])
        # handle your request here, register user
        return self.create_response(request,  <some method>)

有了这个,你可以这样称呼它:

http://localhost:8000/authenticateUser # to authenticate
http://localhost:8000/authenticateUser/register # to register

另一种选择是,仅创建两个资源(从另一个继承)并更改元类中的 resource_name

【讨论】:

  • 谢谢wii试试
  • 如何访问请求数据? request.data['email'] 给我 AttributeError: request
  • 通常,您可以通过以下方式访问它:request.POST.get('email', None)
  • 感谢您的信息。但这没有用。看起来像文档中的请求 - 请求可以通过带有空 POST 字典的 POST 进入 - 例如,如果通过 POST HTTP 方法请求表单但不包含表单数据。因此,您不应该使用 if request.POST 来检查 POST 方法的使用;相反,使用 if request.method == "POST"。我目前正在通过 request.body 访问,然后将其转换为字典
猜你喜欢
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
相关资源
最近更新 更多