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
Вернуться на верх