У меня есть достойный опыт в представлении на основе функций в Django, и теперь я пытаюсь использовать Class based View. хотя я могу решить проблемы, но я не уверен в стандарте, я хочу, если я буду делать это правильно или неправильно, что вы, парни (разработчики Django), следуете.RESTful api в Django, используя inbult view в Django, не создавая 2 URL-адреса
Более подробно о проблеме является здесь-
views.py
from django.views.generic import View
class InvoiceTransaction(View):
def __init__(self):
super(InvoiceTransaction, self).__init__()
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super(InvoiceTransaction, self).dispatch(*args, **kwargs)
def get(self, request, *args, **kwargs):
invoiceid = kwargs.get('invoiceid')
# here I have invoiceid, which is I'm passing through url paramaeters(see urls.py file)
# based on invoice, I can decide what type of GET requests it is
# whether user is asking for a single resource or all resource, right?
if invoiceid:
invoice = [Invoice.objects.get(id=invoiceid)]
else:
invoice = Invoice.objects.all()
def post(self, request, *args, **kwargs):
# some stuff
urls.py
from django.conf.urls import patterns, url
from invoice import views
urlpatterns = patterns('',
(r'^invoices/$', views.InvoiceTransaction.as_view()),
(r'^invoices/(?P<invoiceid>.*)/$', views.InvoiceTransaction.as_view()),
)
Я после этого учебника https://realpython.com/blog/python/django-rest-framework-class-based-views/
Итак, моя проблема в том, что я создаю две строки (urls) в файле urls.py для одного запроса, чтобы определить тип запроса GET. есть ли другой или лучший способ сделать это. как я могу создать спокойный api, используя представление, и не создавая 2 URL-адреса.
PS: не стесняйтесь предлагать улучшения/изменения в вышеприведенном коде, поскольку я новичок в этой вещи. это может быть, если я использую метод отправки неправильно или idont действительно нужно init метод, все, что вы предлагаете.
Nice :) но было бы здорово, если бы вы могли объяснить это регулярное выражение, так как мне не очень удобно с регулярным выражением, как работают двойные скобки и фигурные скобки? – bakar
Внешние скобки заключают в том, что полный блок необязателен или максимальный 1 (обратите внимание на '{, 1}', следуя за ним), это позволяет 'invoice /', и если блок присутствует, то 'invoice/10 /', так как max 1 дополнительного блока поддерживается 'invoice/10/5 /' является недопустимым. –
, но '^ счет-фактура (/ (? P. *)) {, 1}/$' не работает? можете ли вы предложить, что с этим не так? 'invoice_type' - это строка (на мой взгляд, будет сопоставлена предопределенные слова) –
bakar