Устранение неисправностей в форме / представлении / шаблоне Django и о том, как они все работают вместе - PullRequest
0 голосов
/ 15 февраля 2012

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


Мой файл urls.py выглядит так ...

from django.conf.urls.defaults import patterns, include, url
from users.views import homepageview, submitted, referral_create

urlpatterns = patterns('',
(r'^$', homepageview),
(r'^submitted/$', referral_create),

файл views.py выглядит следующим образом ...

  # Create your views here.
from django.shortcuts import render_to_response
from django import forms
from datreferral.users.forms import ReferralCode

def homepageview(request):
    now = 'your damn referral code'
    return render_to_response('datreferraltemplate.html', {'now': now})

def referral_create(request):
    if request.method == 'POST':
        form = ReferralCode(request.POST)
        if form.is_valid():
            new_code = form.save()
            return HttpResponseRedirect(reverse(contact_details, args=(new_contact.pk,)))
    else:
        form = ReferralCode()

Файл form.py выглядит как

from django import forms

class ReferralCode(forms.Form):
    referralcode = forms.CharField()

и шаблон выглядит так ...

{% extends "base.html" %}

{% block title %}
Enter your referral codes!
{% endblock %}

{% block content %}
<h1>Enter your code</h1>

    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

    <form action="" method="POST">
        <p>Subject: <input type="text" name="subject" value="{{ referralcode }}"></p>
        <input type="submit" value="Submit">
    </form>
{% endblock %}

Надеюсь, этого достаточно.

Я ищу две вещи. Прежде всего, когда я пытаюсь просмотреть страницу после отправки формы, я не вижу, где, потому что я предполагаю, что «if request.method == 'POST':" не запускается. Очевидно, это что-то довольно очевидное, но я нахожусь в одном из тех режимов, где я могу найти ошибку для моей жизни.

Второй вопрос, который у меня есть, это в основном просьба о помощи. почему-то после прочтения этих глав несколько раз я не могу понять, как все части взаимодействуют друг с другом. Я знаю, что шаблон и urls.py и views.py взаимодействуют, и я получаю (я думаю), но я не могу понять, как база данных и формы взаимодействуют друг с другом и с представлениями / шаблонами. как, скажем, я просто хотел создать простую форму, в которой независимо от введенного использования записывается в базу данных ... Как бы вы это сделали? Я использую postgres, если это имеет значение.

Примечание: форма и шаблон в шаблоне являются модифицированной версией кода, который я нашел здесь и пытался манипулировать для удовлетворения своих потребностей, но не смог, так что не переборщите, если это не имеет смысла, если бы я не был ' из-за этих проблем не могу так много возиться с этой частью.

Поскольку я новичок в веб-разработке, я действительно ценю любого, кто готов помочь мне или указать мне правильное направление.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012
  1. Вы ничего не возвращаете в своем предложении else.Представления должны всегда возвращать ответ, который может быть почти любым, но в большинстве случаев вы возвращаете экземпляр (под) -класса HttpResponse (мне действительно нравится render ярлык).Хорошей идеей будет иметь возврат по умолчанию в нижней части вашего представления, добавить некоторые ранние возвраты для «специальных» ответов и в противном случае позволить выполнению достичь возврата по умолчанию - таким образом, у вас никогда не будет случая, когда вы ничего не возвращаете.

  2. Вы должны использовать модель для сохранения данных (проходили ли вы урок ?).Обычно модель исполнения выглядит следующим образом:

    1. ваше приложение получает запрос, и в urls.py ищется представление, которое должно называться
    2. , запрос проходит через middleware
    3. , который вы просматриваете, называется и что-то делает.Т.е. он выбирает данные из базы данных (снова используя модель) или сохраняет что-то в БД (или сохраняет загруженный файл, отправляет почту и т. Д. - aview действительно может делать все что угодно)
    4. вы просматриваете, возвращает "что-то"«
    5. возвращенное« что-то »передается через промежуточное ПО и в конечном итоге преобразуется в поток данных, передаваемых в браузер

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

0 голосов
/ 15 февраля 2012

Ну, здесь много чего не так.

Во-первых, ваша форма обрабатывается базовым представлением homepageview и отправляется обратно по тому же URL-адресу. Однако логика обработки формы находится в отдельном представлении, которое не вызывается. Либо измените параметр action формы, чтобы он указывал на другой URL, либо - лучше - переместите всю логику в одно и то же представление.

Во-вторых, ваше представление обработки формы не возвращает ответ или не отображает шаблон. Это ошибка в Django, и если вам удалось вызвать это представление, вы увидите исключение.

В-третьих, мне трудно поверить, что вы прочитали всю книгу Django и ничего не видели о моделях или базах данных. Здесь нет никаких указаний на то, что вы настроили какие-либо модели, но без них Django ничего не будет записывать в базу данных. Вам нужно будет сделать это, а затем изменить свою форму на подкласс ModelForm, после чего вы можете успешно вызвать form.save().

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