Извините, если это тривиальный вопрос, но я довольно долго искал и не смог найти хорошую реализацию.
Может ли кто-нибудь предоставить пример того, как реализовать представление только для публикации (которое может обрабатывать загрузку файлов) в Django, создав подкласс любого из общих представлений?
Я хочу создать конечную точку, которая обрабатывает всю логику создания комментариев к сообщениям в блогах. Форма комментария встроена в мою страницу блога, и поэтому эти данные будут отправлены на URL-адрес как POST
.
4 ответа
Класс View
имеет http_method_names
, в котором перечислены методы HTTP, которые принимает представление.
Следовательно, вы можете создать подкласс любого общего вида, который вам нравится (например, { {X0}}) и установите http_method_names
так, чтобы разрешались только запросы POST.
from django.views.generic.edit import CreateView
class CommentCreateView(CreateView):
http_method_names = ['post']
model = Comment
...
Как вариант, вы можете создать подкласс View
и написать свой собственный метод публикации.
class CommentView(View):
def post(self, request):
...
В этом случае запросы GET вернут ответ HttpResponseNotAllowed
, потому что вы не определили метод get
для обработки запросов GET.
Я думаю, что-то вроде этого должно работать:
class TestView(View):
def post(self, request):
return HttpResponse('This is a post only view')
Вы также можете сделать это с помощью CreateAPIView, если вы используете Django Rest Framework. http://www.django-rest-framework.org/ api-guide / generic-views / # createapiview.
Используется для конечных точек только для создания.
Предоставляет обработчик метода публикации.
Из документации :
dispatch проверяет запрос, чтобы определить, является ли он GET, POST и т. д., и передает запрос соответствующему методу , если он определен , или вызывает HttpResponseNotAllowed
По сути, любое созданное вами представление на основе классов, в котором вы определяете только метод POST
, разрешит только POST-запрос.
Вы можете попробовать что-то вроде:
class MyView(TemplateView):
template_name = 'my_template.html'
def post(self, request, **kwargs):
my_data = request.POST
# do something with your data
context = {} # set your context
return super(TemplateView, self).render_to_response(context)
Похожие вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.