метод 405 не допускается - PullRequest
0 голосов
/ 13 февраля 2019

получая ошибку 405, не могу сказать, почему.URL, кажется, проверяет, метод POST .... что мне здесь не хватает.

urls.py :

from django.conf.urls import url, include
from django.contrib import admin
from tweets.views import Index, Profile, PostTweet
admin.autodiscover()


urlpatterns = [
    url(r'^$', Index.as_view()),
    url(r'^user/(\w+)/$', Profile.as_view()),
    url(r'^user/(\w+)/post/$', PostTweet.as_view()),
]

html :

{% extends "base.html" %}
{% block content %}

<div class="row clearfix">
  <div class="col-md-12 column">
    <form method = 'POST'>{% csrf_token %}
      <!-- <div class="col-md-8 col-md-offset-2  fieldWrapper"> -->
        {{ form.text.errors }} 
        {{ form.text }}
      <!-- </div> -->
      {{ form.country.as_hidden }}
       <button type="submit"  value="post it">Post
    </form>
  </div>
  <!-- <div class="col-md-12 column">
    {% for tweet in tweets %}
    <div class="well">
    <span>{{ tweet.text }}</span>
    </div>
    {% endfor %}
  </div> -->
</div>
{% endblock %} 

views.py :

class PostTweet(View):
    def post(self, request):
        if request.method =='POST':
          print('post')
        return HttpResponse('posted')

Все равно получаю вышеуказанную ошибку независимо от того, что я делаю.Любые идеи будут оценены.Спасибо

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Попробуйте:

{% extends "base.html" %}
{% block content %}

<div class="row clearfix">
  <div class="col-md-12 column">
    <form method = 'post'>{% csrf_token %}                         #<-- POST to post
      <!-- <div class="col-md-8 col-md-offset-2  fieldWrapper"> -->
        {{ form.text.errors }} 
        {{ form.text }}
      <!-- </div> -->
      {{ form.country.as_hidden }}
       <button type="submit"  value="post it">Post</button>        #add this
    </form>
  </div>
  <!-- <div class="col-md-12 column">
    {% for tweet in tweets %}
    <div class="well">
    <span>{{ tweet.text }}</span>
    </div>
    {% endfor %}
  </div> -->
</div>
{% endblock %} 
0 голосов
/ 13 февраля 2019

Вам необходимо изменить имя метода записи в поле зрения, оно должно быть post, а не Post.Также необходимо обновить сигнатуру метода следующим образом:

class PostTweet(View):
    def post(self, request, *args, **kwargs):  # renamed it post instead of Post
        if request.method =='POST':
          print(post)
        return HttpResponse('posted')

Также обновите форму следующим образом:

<form method="post">{% csrf_token %}
  <!-- <div class="col-md-8 col-md-offset-2  fieldWrapper"> -->
    {{ form.text.errors }} 
    {{ form.text }}
  <!-- </div> -->
  {{ form.country.as_hidden }}
   <button type="submit"  value="post it">Post
</form>

Обновить

Вам необходимо предоставить метод get дляпредставление для получения http get функциональности (я использую render () для отображения html):

class PostTweet(View):
    def post(self, request, *args, **kwargs):  # renamed it post instead of Post
        if request.method =='POST':
          print(post)
        return HttpResponse('posted')

    def get(self, request, *args, **kwargs):
        form = YourForm()
        return render(request, 'your_html.html', {'form': form})

Вам необходимо определить форму также (если вы этого не сделали) для визуализации формы в html.

Наконец, я не знаю, почему вы берете на себя такие хлопоты, чтобы визуализировать форму, где вы можете просто использовать FormView , который сделает все за вас.Например:

class YourForm(forms.Form):
    country = forms.CharField()


class PostTweet(FormView):
     form_class = YourForm
     template_name = "path/to/template.html"

     def form_valid(self, form):
         print(form.cleaned_data)  # it will show all the data submitted from the form
         return super(YourFormView, self).form_valid(form)

Как я вижу, ваши URL не определены должным образом с помощью регулярных выражений.Вы можете обновить его так:

urlpatterns = [
    url(r'^user/(?P<username>[-\w]+)/post/$', PostTweet.as_view()),  # or any other variable
    url(r'^user/(?P<username>[-\w]+)/$', Profile.as_view()),
    url(r'^$', Index.as_view()),
]

Поэтому, когда вы нажмете, чтобы увидеть PostTweet, используйте /user/<any_username>/post/, где any_username может быть любым именем пользователя, которое вы хотите использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...