Форум сайта python.su
Всем привет. Пытаюсь сделать комментарии для статей, но при вводе в форму и нажатии на кнопку Отправить комментарий открывается ссылка http://127.0.0.1:8000/articles/addcomment/1/ и комментарий не добавляется, хотя должен добавиться комментарий и открыться страница статьи на которую оставлен комментарий вида http://127.0.0.1:8000/articles/get/1/ .
urls.py:
url(r'^articles/addcomment/(?P<article_id>\d)/+$', 'article.views.addcomment'),
<form action = '/articles/addcomment/{{ article.id }}/' method="post"> {% csrf_token %} {{ form }} <input type = 'submit' class = 'button' value="Добавить комментарий"> </form>
class Comments(models.Model): class Meta: db_table = 'comments' text = models.TextField(verbose_name='Текст комметария') comments_article = models.ForeignKey(Article)
from django.forms import ModelForm from article.models import Comments class CommentForm(ModelForm): class Meta: model = Comments fields = '__all__' exclude = ['comments_article']
def addcomment(request, article_id): if request.POST: form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.comments_article = Article.objects.get(id=article_id) form.save() return redirect('/articles/get/%s/' % article_id)
Отредактировано VansKiter (Июль 6, 2015 15:10:41)
Офлайн
1.
comment = form.save(commit=False) comment.comments_article = Article.objects.get(id=article_id) form.save()
Офлайн
FishHookя так понимаю это намек автору топика, что мол надо указывать импорт приводы фрагмент кода. Ну а вообще это django.shortcuts.redirect
2. Что за функция redirect, откуда она?
FishHookне совсем, тут если заранее известно что на этот запрос дожен быть послан POST запрос, то проверяется сразу содержание словаря. Если он пустой - то запрос не был отправлен.
3. if request.POST:
Да ну нафиг, всегда было if request.method == “POST”
if request.POST: .... elif request.GET: .... else: ....
Офлайн
JOHN_16Не очень понимаю, как запрос попал в представление, если он не был отправлен.
то проверяется сразу содержание словаря. Если он пустой - то запрос не был отправлен.
def post(self, request, *args, **kwargs): if request.POST: print "POST" else: print "Not POST???" print request.method data = json.loads(request.body) print data
>>> Not POST??? >>> POST >>> {"columns": {"name": 50, "code": 30, "id": 20}}
Офлайн
FishHookИзвини. не дописал. Я говорил о именно POST запросе . т.е. в теле запроса содержался POST заголовок.
Не очень понимаю, как запрос попал в представление, если он не был отправлен.
Офлайн
JOHN_16
Зная что должно быть на входе, что должно быть на выходе, а все остальное тчо не подходит - отсеивается как варианты.
Офлайн
FishHook
Я не совсем понял что ты имеешь ввиду ( где именно это происходит) говоря о смешениие фронт и бек эндов и request.POST. С ангуляром не знаком. МОжешь пояснить на примере?
Офлайн
Да пример, собственно, выше был, вот он
def post(self, request, *args, **kwargs): if request.POST: print "POST" else: print "Not POST???" print request.method data = json.loads(request.body) print data
Отредактировано FishHook (Июль 7, 2015 16:30:25)
Офлайн
FishHook
а какой смысл посылать ПОСТ запрос без самого ПОСТ заголовка? Он не для этого предназначен. Для этого ГЕТ есть. Выходит какая то не правильная ситуация. Мол у менять есть феррари и я им вместо трактора огород вспахиваю, ну и что что она предназначена для скорострных трасс - вперед мол едет, значит и с этим должна справиться. Это конечно шуточная аналогия :).
Я к тому что может изначально правильные технологии и методы использовать? Я про то что требует стандарт HTML - запрашивать страницы методом GET, передавать данные форм POST ну и т.д. POST же имеет и другие преимущества в сравнении с GET.
P.S. FishHook я все понял о чем ты говоришь; и да разработчики в документации говорят о проверке вида request.method
P.S.S. а с какой целью Ангуляр посылает пост запрос, без самого заголовка и с данными в теле обычного html ?
Офлайн
JOHN_16Всё не так, ангуляр отправляет нормальный валидный запрос, просто джанга живёт в прошлом веке и не может его нормально интерпретировать. Джанга ждёт body в таком формате
P.S.S. а с какой целью Ангуляр посылает пост запрос, без самого заголовка и с данными в теле обычного html ?
csrfmiddlewaretoken=v7ZLpCRt8PcHpRwQvgT13ggVdxjGGn9c&time=08.07.2015+02%3A55%3A18&action=start_stoppage&code=
{csrfmiddlewaretoken:"v7ZLpCRt8PcHpRwQvgT13ggVdxjGGn9", time: "08.07.2015 09:00:00", action: "start_stoppage", "code":null}
Офлайн