Django send_mail应用程序 - 与Yeoman前端联系起来

时间:2013-10-17 08:16:19

标签: python django yeoman

我使用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 吗?我真的想把这个逻辑保留在后端。非常感谢任何指导我正确方向的帮助。

1 个答案:

答案 0 :(得分:4)

首先,你应该考虑不使用Django模板&amp;形式。 (假设你正在研究一些更大的东西)
Django是一个非常酷的框架,但我发现它的两个构建块有些限制(https://stackoverflow.com/a/17383408/1432478) 与Yeoman一起使用的JS框架应该负责构建HTML。

Django-Yeoman整合

开发架构

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

但是等等...... Node.js服务器应该如何知道后端逻辑? Yo可以使用grunt-connect-proxy将任何请求转发给另一台服务器 - 在本例中为Django 我发现this grunt-connect-proxy设置指南特别有用。

通过向完全相同的套接字地址(IP:port)发出后端请求,您无需执行CORS或疯狂的操作,例如在构建应用程序的生产就绪版本时解析整个前端代码命令将开发中使用的套接字地址替换为适合生产的套接字地址。

生产与销售部署

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

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

  • LiveReload
  • linting your code
  • 发电机
  • ...

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

样品

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

Tastypie

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

进一步阅读

我的设置基于this

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