События в Джанго - PullRequest
       11

События в Джанго

1 голос
/ 22 сентября 2009

Это может быть очень глупый вопрос, но я нигде не могу найти ответ. Мне было интересно, как вы справляетесь с событиями в Джанго. Я прочитал учебник на их веб-странице и не могу найти признака объяснения, или я его пропускаю.

Я работаю в веб-формах ASP.NET, и, как вы, вероятно, знаете, способ сделать это - поместить имя события в элемент управления ASP.NET и вызвать определенную процедуру. Я знаю, что Django - это совсем другой фреймворк, потому что это MVC, но я быстро взглянул на учебник по ROR и думаю, что видел, что они используют что-то похожее на веб-формы ASP.NET, если я правильно понял, что-то вроде встраивания код ruby ​​в интерфейсе html и объявление там действия, которое, я полагаю, вызывает соответствующую функцию, что-то вроде этого <% = ..., action: 'action1', ...%>, который вызывает функцию 'def action1:' в контроллере, похожую (только в этом смысле) на asp.net, но webforms не отображает представление с именем функции среди прочего.

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

Ответы [ 3 ]

4 голосов
/ 22 сентября 2009

Я бывший разработчик ASP.NET, который почти полностью перешел на Django, поэтому я точно знаю, о чем вы спрашиваете.

Вероятно, самый простой способ объяснить это так: то, что вы считаете «событием», - это URL-адрес и представление в Django. Абстрагируйтесь от того, что вы делали в ASP.NET, и это будет иметь смысл - у вас был элемент управления, который был просто элементом на странице. Это было сопоставлено с событием, которое на самом деле было не чем иным, как функцией. Итак, модель того, что вы делаете, выглядит следующим образом:

object > method

В Django это похоже, но есть дополнительный шаг. ASP.NET автоматически подключил объект к методу. В Django вам нужно сделать это самостоятельно. Вы делаете это путем создания URL-адреса для этого объекта (urls.py), а затем назначаете этот URL-адрес представлению (views.py), которое в действительности является не чем иным, как методом. В Джанго та же модель выглядит так:

object > url > method

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

2 голосов
/ 22 сентября 2009

Эта концепция управления (TextBox, Button и т. Д.) И событий страницы, как вы описываете, не переносится на большинство других сред. Все это было частью попытки Microsoft сделать опыт веб-разработки очень похожим на опыт разработки приложений Windows - к лучшему или к худшему.

Например, в приложении WebForms:

button.Click += Button_Click;

private void Button_Click(object sender, EventArgs e)
{
    // handle action here
}

Примерно соответствует чему-то вроде (на стороне клиента, в шаблоне):

<form action="/myaction" method="POST">
    <input type="submit" value="Click me" />
</form>

Вид сбоку на сервер:

def myaction(request):
    if request.method == "POST":
        # handle action here
        pass

Другими словами, то, что вы хотите делать в Django и в других средах MVC, - это иметь уникальные «действия» или методы для классов вашего контроллера (или функций представления в Django). Эти действия обычно отвечают на запросы HTTP GET и POST.

Если вы хотите, чтобы на ваших элементах управления были события на стороне клиента, вам нужно использовать JavaScript-фреймворк, такой как jQuery .

2 голосов
/ 22 сентября 2009

Вы делаете это в представлении, в зависимости от значений словаря request.POST.

Например, скажем, у вас есть две кнопки в форме HTML, одна с name="submit" и одна с name="add". Тогда, по вашему мнению, вы можете сделать:

if 'add' in request.POST:
    # do add action
elif 'submit' in request.POST:
    # do submit action

Именно так приложение администратора управляет разницей между кнопками «Сохранить», «Сохранить и продолжить» и «Сохранить и добавить еще».

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