CS50 Project 1 Help - Wiki Search w/ Django - Застрял на том, как сохранить новую страницу
Итак, я создаю свою поисковую страницу Wiki с помощью Django, и пока все идет хорошо. Теперь я застрял на том, как создать новую запись в моей поисковой энциклопедии. На главной панели ссылка "Создать новую страницу" работает нормально и переводит меня на новую страницу, где я могу создать новую запись. Проблема в том, что когда я пытаюсь сохранить запись в энциклопедии, я получаю следующее сообщение:
ValueError at /new/ Представление encyclopedia.views.new не вернуло объект HttpResponse. Вместо этого оно вернуло None.
Я думаю, что это проблема в моей секции views.py, но не могу разобраться. Вот мой views.py
def new(request):
if request.method == 'GET':
return render(request, "encyclopedia/new.html", {
"create_form": CreateForm(),
"search_form": SearchForm()
})
file_content = request.POST.get("content","")
file_title = request.POST.get("title", "")
if (len(file_content) == 0 or len(file_title) == 0):
return render(request, "encyclopedia/error.html", {
"message": "Bad Request",
"description": "Title and content cannot be empty",
"status": 400
})
if util.get_entry(file_title):
return render(request, "encyclopedia/error.html", {
"message": "Bad Request",
"description": "This page already exists",
"status": 400
})
Все со страницей работает нормально. Я получаю правильную ошибку при попытке сохранить страницу без какой-либо записи. Проблема в том, что она просто не сохраняет новую запись, когда я пытаюсь добавить текст.
Во-первых, если вы хотите создать объект на основе переданных данных, используйте POST
, а не GET
.
def new(request):
if request.method == 'POST':
create_form = CreateForm(request.POST)
if create_form.is_valid():
create_form.save()
return redirect('/')
else:
create_form = CreateForm()
return render(request, 'encyclopedia/new.html', {'create_form': create_form, 'search_form': search_form})
Я думаю, что вы могли бы улучшить еще несколько вещей. Реализовать ограничения полей с помощью models
или forms
. В случае с поисковой системой оптимальным будет использование GET
.
request.GET.get