web-dev-qa-db-fra.com

Méthode Django non autorisée (POST)

Dans les vues:

def article_add(request):
    print request.user, " is adding an article"
    if request.method == "POST":
        web_url = request.POST['web_url']
        Uploadarticle(web_url)
        return redirect('myapp:index')

En html:

<form class="navbar-form navbar-right" role="form" method="post" action="{% url 'myapp:article_add' %}" enctype="multipart/form-data">
{% csrf_token %}
    <div class="form-group">
        <div class="col-sm-10">
        <input id="article_url" name="web_url" type="text">
        </div>
   </div>
   <button type="submit" class="btn btn-default"> + </button>
</form>

Dans url.py:

app_name = 'myapp'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^$', views.article_add, name='article_add'),
]

Ce que j'essaie de faire ici est de transmettre la valeur de l'URL via HTML pour afficher, appeler la fonction pour télécharger la base de données, rediriger l'utilisateur vers la même page d'accueil que l'actualisation, puis l'élément nouvellement ajouté apparaîtra. 

D'une manière ou d'une autre, chaque fois que je soumets une page vierge, un message d'erreur s'affiche dans le terminal: 

Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0
6
viviwill

Comme je peux le voir dans le code, vous utilisez la même URL pour les deux vues. Ainsi, chaque fois que vous tapez l'adresse URL /, la requête passe à la première vue (IndexView) qui n'a probablement aucune méthode de publication. Changer l'URL pour la vue article_add. Fait comme ça:

app_name = 'myapp'
urlpatterns = [
    url(r'^article-add/$', views.article_add, name='article_add'),
    url(r'^$', views.IndexView.as_view(), name='index'),

]

Vous pourrez accéder à la vue à partir de l'URL {Host_address}/article-add/

7
ruddra

Il y a une petite erreur dans votre urls.py changer votre urls.py de la manière suivante

app_name = 'myapp'

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^article-add/$', views.article_add, name='article_add'),
]

si vous êtes inclus l'urls.py 'myapp' dans le projet principal urls.py, puis sous la forme en HTML, mettez simplement action="{% url 'article_add' %}" de cette façon également.

2
Cadmus