0

我使用 Django 作为后端,使用 Yeoman 作为前端。我都是新手。我的前端本地服务器正在运行localhost:9000,我的后端服务器正在运行localhost:8000

我刚刚按照 Django 教程构建了一个电子邮件发件人应用程序。它运行良好,包括:

表单:

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    telephoneNr = forms.IntegerField()
    message = forms.CharField(widget=forms.Textarea)

一个看法:

from django.core.mail import send_mail
from django.shortcuts import render, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from mailsender.forms import ContactForm

def contact(request):
    if request.method == 'POST': 
        form = ContactForm(request.POST)
        if form.is_valid():
            success = True
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            telephoneNr = form.cleaned_data['tlf']
            message= form.cleaned_data['melding']
            receiverEmail = ['somewhere@example.com']
            text = message +'\n'+name +'\n'+str(telephoneNr)

            send_mail('Contact form', beskjed, email, receiverEmail)
            return render(request,"result.html")

    else:
         form = ContactForm(
    return render(request, 'contactform.html', {'form':form})

还有我的 HTML:

<h1>Contact us</h1>

{% if form.errors %}
  <p style="color: red;">
    Please correct the error{{ form.errors|pluralize }} below.
  </p>
{% endif %}

<form action="" method="post">
  <table>
    {{ form.as_p }}
  </table>
  {% csrf_token %}
  <input type="submit" value="Submit">
</form>

如果我访问localhost:8000/contactform,联系表格会按照我的意愿显示,并且会发送电子邮件。

我需要帮助弄清楚如何将这个视图连接到 Yeoman 前端——因为搜索 Internetz(和 SO)会导致我陷入混乱的道路。我应该使用Tastypie吗?我真的很想将这个逻辑保留在后端。非常感谢任何为我指明正确方向的帮助。

4

1 回答 1

4

首先,您应该考虑完全不使用 Django 模板和表单。(假设您正在处理一些更大的事情)
Django 是一个非常酷的框架,但我发现它的这两个构建块有些有限(https://stackoverflow.com/a/17383408/1432478)。
与 Yeoman 一起使用的 JS 框架应该负责构建 HTML。

Django-Yeoman 集成

开发架构

Yeoman 应该提供 html(模板替换)和其他静态文件 + 照顾您选择的 JS 框架。
如果前端需要从后端获取/提交一些数据,它应该向提供静态内容的同一服务器发出请求(在引擎盖下,Yeoman 使用 Node.js 作为该服务器)。

但是等等...... Node.js 服务器应该如何了解后端逻辑?
你可以使用grunt-connect-proxy将任何请求转发到另一台服务器 - 在这种情况下是 Django。
我发现这个grunt-connect-proxy 设置指南特别有用。

通过向同一个套接字地址发出后端请求(IP:port(开发适合生产的那一款。

生产和部署

当您运行时grunt,它将在dist子目录中打包您的前端静态文件的生产就绪版本。
在将您的 django 应用程序作为一个包提交之前,您基本上将 htmls 和其余的静态内容文件复制到static/your_app.
我决定将 Angular 的 html 作为静态内容提供服务——让它们成为 Django 的模板会引起太多麻烦(冲突的标记、静态加载器等等......)。当部署一些 django 项目(包含您的 django 应用程序)时,由 node 提供的 dev setup 中的静态文件将由 django 提供。
换句话说:在生产中你只需要一台服务器——django 使用的一台。

只有在开发过程中,您才需要从 yeoman 提供的模糊嗡嗡声中受益,例如:

  • 实时重载
  • 整理你的代码
  • 发电机
  • ...

注意:我听说 Yeoman 团队正计划提供一种将 yeoman 与 Web 框架集成的更好方法。不知道他们想怎么做,也许是与生成器类似的解决方案(每个框架单独的生成器)。

样本

你可以查看我目前正在开发的 django 应用程序:https
://github.com/vucalur/django-wibses/ 它使用 Angular JS,上面我刚刚描述了它的架构 :)
注意:它不是-尚未完成 :) 但截至今天,开发设置已完成,除了 CSRF 保护。

好吃的

我们正在考虑在提到的应用程序中使用 Tastypie,但只有在手动编写 RESTful API 时才会变得困难。所以我认为是否使用 Tastypie 取决于你。

进一步阅读

我的设置基于

但是,如果您对 Java Web 应用程序有所了解,您应该看看那些(我希望我的 Django-Yeoman 集成的工作方式类似于 Java(Maven)-Yeoman 集成的工作方式):

于 2013-10-17T11:27:25.603 回答