【问题标题】:Django not hitting Class View on Form GetDjango 没有在 Form Get 上点击 Class View
【发布时间】:2016-10-26 13:19:04
【问题描述】:

我已经定义了这个网址:

url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<id_form>\w+\.\d+)/$', views.PersonFormView.as_view())

正则表达式使用正则表达式测试器检查测试:persons/P.1/forms/D.1/

这是我的课堂视图:

class PersonFormView(APIView):
def get(self, request, id_person, id_form, format=None):
    form = Form.get_form_for_person(self, id_person, id_form)
    serializer = FormSerializer(form, many=True)
    return Response(serializer.data)

GET 它没有击中视图。非常感谢您的帮助。

更新: 似乎 URL 定义发生冲突。我有这两个:

url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<formacronym>\w+)/$', views.PersonFormCreateView.as_view()),
url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<id_form>\w+\.\d+)/$', views.PersonFormView.as_view()),

我希望能够使用这些 url 访问 API:

/persons/P.1/forms/D/
/persons/P.1/forms/D.1/

是否可以定义 2 个 URL,以便我可以使用上面提供的 2 个示例 URL 进行浏览?

【问题讨论】:

  • 那是什么?你有错误吗?
  • 我收到 404:GET /persons/P.1/forms/D.1/ HTTP/1.1" 404 23

标签: python django django-class-based-views


【解决方案1】:

您的正则表达式不适合该网址。

试试这个:

url(r'^persons/P.(?P<id_person>\d+)/forms/D.(?P<id_form>\d+)/$', some_view),

编辑:

如果第二个参数是可选的,它应该用 * 声明。像这样(未测试):

url(r'^persons/P.(?P<id_person>\d+)/forms/D[.](?P<id_form>\d*)/$', some_view),

我真的不明白添加点和 D 或 P 字符的意义。我建议保持简单,例如:

/persons/1/forms /persons/1/forms/1

Wich 将由两个正则表达式完成:

url(r'^persons/(?P<id_person>\d+)/forms/$', some_view),
url(r'^persons/(?P<id_person>\d+)/forms/(?P<id_form>\d+)/$', some_view),

另外,在视图中,id_form 参数必须有一个默认值。

【讨论】:

  • 您遇到异常了吗?我会 1. 检查完整的网址。 2. 检查 APIView 是否已定义,因为您正在扩展该类(您必须导入它:from rest_framework.views import APIView)。
  • @Dowling - 请注意我更新了我的问题。感谢您的帮助。
  • 第二个参数不是可选的。我希望“/persons/P.1/forms/D/”访问一个 api,而“/persons/P.1/forms/D.1/”访问另一个 api。所以当它只是一个字母时点击一个api,当它是一个字母+点+数字时,点击一个不同的api。
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 2020-11-02
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多