14

ヨーマンをDjangoと連携させることができる人はいますか?私はそれを設定しようとしましたが、gruntファイルを正しいパスに変更しても、デフォルトが使用されます。

私は検索しただけですが、誰もがそのようなファイル構造を使用しているわけではありません。

4

1 に答える 1

28

だから、それは私が上でした本当にばかげたコメントでした。:-)

これが適切な応答です!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

そして、これが純粋なjsonWebサービスとして機能するdjangoアプリケーションのツリー構造です。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

ドメインおよびhttp://service.mysite.com/api/v1/などのURLからdjangoWebサービスを実行し、フロントエンドのyeomanが必要に応じてこれらのAPIURLを呼び出す「静的」サイトhttp://mysite.comを生成するようにします。

ヨーマンが生成したAngularJSアプリは、django-tastypieAPIによって提供されたAPIリソース/URLをPOSTS/ GETS / PUTS/DELETESするだけです。

これは、考慮できる緩く結合された構成です。

ただし、この設定は「クロスドメインAPIリクエスト」を実行していることに注意してください。これは、「サーバー側」のdjangoアプリケーションで、CORSを処理する必要があることを意味します。

これが機能するために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
于 2013-02-14T04:17:51.890 に答える