繁体   English   中英

Django send_mail应用程序-与Yeoman前端挂钩

[英]Django send_mail application - hook it up with Yeoman frontend

我使用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/contactformlocalhost:8000/contactform我的意愿显示联系表单,它确实发送电子邮件。

我需要帮助弄清楚如何将这种观点与Yeoman前端挂钩-因为搜索Internetz(和SO)会使我走上混乱的道路。 我应该使用Tastypie吗? 我真的很想在后端保留这种逻辑。 非常感谢您为我指明正确的方向。

首先,您应该考虑完全不使用Django模板和表单。 (假设您正在研究一些更大的东西)
Django是一个非常酷的框架,但是我发现它的这2个构建块有所限制( 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 )发出后端请求,您无需执行CORS或疯狂的工作,例如在构建应用程序的生产就绪版本以替换套接字时解析整个前端代码。开发中使用的地址与一种适合生产的地址。

生产与部署

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

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

  • LiveReload
  • 整理你的代码
  • 发电机
  • ...

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

样品

您可以查看我目前正在使用的Django应用程序: https : //github.com/vucalur/django-wibses/
它使用了Angular JS,上面我已经描述了它的体系结构:)
注意:尚未完成:)但是,到目前为止,除CSRF保护外,开发设置已经完成。

Tastypie

我们正在考虑在提及的应用程序中使用Tastypie,但只有在手动编写RESTful API时才会变得很艰巨。 因此,我认为是否使用Tastypie由您决定。

进一步阅读

我基于设置。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM