【问题标题】:Setting up Yeoman with Django使用 Django 设置 Yeoman
【发布时间】:2023-03-05 02:25:01
【问题描述】:

有没有人能够让Yeoman 与 Django 一起工作? 我尝试设置它,即使我将 grunt 文件更改为正确的路径,它仍然使用默认路径。

我只搜索过,但没有人使用这种文件结构。

【问题讨论】:

  • 我个人建议你将 brunch 与 django 一起使用 - github.com/sebastibe/brunch-django-examples 与 yeoman 相比,Brunch 也是一个更成熟的库。但这并不能回答您最初的问题。因此,这里仅作评论。 :-)

标签: django gruntjs yeoman


【解决方案1】:

所以这是我上面的一个非常愚蠢的评论。 :-)

这是一个正确的回应! Yeoman 只是一个脚手架工具,让我们快速生成 css、js 和 html 文件。我以完全解耦的方式使用它,与 django 完全分离。

这是前端站点的树结构。

/Users/calvin/work/yeoman-test/
|~app/
| |~scripts/
| | |~controllers/
| | | `-main.js
| | |~vendor/
| | | |-angular.js
| | | |-angular.min.js
| | | |-es5-shim.min.js
| | | `-json3.min.js
| | `-app.js
| |~styles/
| | |-bootstrap.css
| | `-main.css
| |+views/
| |-.buildignore
| |-.htaccess
| |-404.html
| |-favicon.ico
| |-index.html
| `-robots.txt
|~test/
| |+spec/
| `+vendor/
|-.gitattributes
|-.npmignore
|-Gruntfile.js
|-package.json
`-testacular.conf.js

这是 django 应用程序的树形结构,它充当纯 json 网络服务。使用 django-tastypie。

/Users/calvin/work/yeomandjango/
|~deploy/
| |-crontab
| |-gunicorn.conf.py
| |-live_settings.py*
| |-nginx.conf
| `-supervisor.conf
|~requirements/
| `-project.txt
|+static/
|-.gitignore
|-.hgignore
|-__init__.py
|-__init__.pyc
|-dev.db
|-fabfile.py
|-local_settings.py
|-local_settings.pyc
|-manage.py*
|-settings.py
|-settings.pyc
|-urls.py
`-urls.pyc

通过从域和 URL(例如 http://service.mysite.com/api/v1/)运行 django Web 服务,并让我们的前端 yeoman 生成“静态”站点 http://mysite.com 根据需要调用这些 API url。

yeoman 生成的 AngularJS 应用只需 POST/GETS/PUTS/DELETES 由我们的 django-tastypie API 提供的 api 资源/url。

这是您可以考虑的松耦合配置。

但是,请注意,此设置正在执行“跨域 API 请求”。这意味着在我们的“服务器端”django 应用程序中,我们需要处理 CORS。

这是一个示例中间件 sn-p,需要在 django 服务器端实现才能正常工作。

import re

from django.utils.text import compress_string
from django.utils.cache import patch_vary_headers

from django import http

try:
    import settings 
    XS_SHARING_ALLOWED_ORIGINS = settings.XS_SHARING_ALLOWED_ORIGINS
    XS_SHARING_ALLOWED_METHODS = settings.XS_SHARING_ALLOWED_METHODS
except:
    XS_SHARING_ALLOWED_ORIGINS = '*'
    XS_SHARING_ALLOWED_METHODS = ['POST','GET','OPTIONS', 'PUT', 'DELETE']


class XsSharing(object):
    """
        This middleware allows cross-domain XHR using the html5 postMessage API.


        Access-Control-Allow-Origin: http://foo.example
        Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
    """
    def process_request(self, request):

        if 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' in request.META:
            response = http.HttpResponse()
            response['Access-Control-Allow-Origin']  = XS_SHARING_ALLOWED_ORIGINS 
            response['Access-Control-Allow-Methods'] = ",".join( XS_SHARING_ALLOWED_METHODS ) 

            return response

        return None

    def process_response(self, request, response):
        # Avoid unnecessary work
        if response.has_header('Access-Control-Allow-Origin'):
            return response

        response['Access-Control-Allow-Origin']  = XS_SHARING_ALLOWED_ORIGINS 
        response['Access-Control-Allow-Methods'] = ",".join( XS_SHARING_ALLOWED_METHODS )

        return response

【讨论】:

  • 你如何从你的前端本地调用 django api 用于开发 porpuses?
  • 非常简单...在不同的端口上运行 Django 本地服务器和前端开发服务器。然后,您可以配置您的 Angular 或任何前端框架,以相应地调用 localhost:django-server-port 获取数据。
  • 嗨 Calvin,你如何部署你的 yeoman 项目?我认为您将 fabfile 用于 Django,但想知道它在 yeoman 项目中是如何工作的,特别是如果有一些繁重的任务等。
  • Django Rest Framework 文档提出了一种使用 CORS 插入服务器标头的相关方法:github.com/ottoyiu/django-cors-headers
  • @brsbilgic 前端站点本质上是 html/js/css 的集合 - 完全静态并在用户第一次加载您的站点时加载到用户的浏览器中。因此,任何将静态文件(甚至是简单的 rsync)发送到服务器的脚本都可以。您唯一需要做的就是确保您的 nginx 配置(或您在服务器上使用的任何网络服务器)设置为提供这些静态文件。所以你不需要fabfiles。无论如何,我已经停止使用 Fabric 并转而使用 ansible 来自动化我的所有部署需求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多