2017-03-29 45 views
2

我有一個項目,我正在使用Angular2來使用我用Django-Rest-Framework構建的其餘API。目前,我必須使用django開發服務器(例如'python manage.py runserver')啓動django api,然後我必須使用'npm start'或cli'ng serve'來啓動angular 2服務器。有什麼辦法可以設置我的django項目來爲angular2項目提供服務嗎?如何從django的開發服務器提供角度2應用程序?

+1

我在這裏回答了它:http://stackoverflow.com/a/43135009/6555866 適合我。 – giaco

回答

2

我假設Django-Rest-Framework有一個選項用於提供靜態資產,對嗎?

如果是這樣,您可以配置角度cli以將其構建輸出生成到Django能夠提供的文件夾中。 ng build的輸出是一組靜態資產(js,css和index.html),可以由任何Web服務器提供服務。因此,如果您將.angular-cli.json中的outDir選項更改爲指向您的Django安裝程序中的靜態資產文件夾,則只需運行單個文件夾即可獲得優勢。

這種方法有兩個主要缺點。首先,您現在必須積極地記住,每次更新角度項目時都要運行ng build,並希望看到新的更改 - 您將失去使用ng服務時發生的自動更新和重新加載。第二個缺點是ng build比修改後更新要慢得多(因爲前者必須寫入文件系統,而後者只是將文件保存在內存中)。

對於Angular文件的每次保存,都有記住要做ng serve的方法,但要麼需要使用gulp或grunt或其他任務運行程序來監視文件更改並運行命令,要麼使用無論Django在自動文件監視和重新加載方面的功能如何(以及我不熟悉Django,但Rails有幫助這些類型的設置的guard gem)。

我希望有幫助。

(老實說,我在Rails上做了類似的設置,最後刪除了它,並且只是並排運行兩臺服務器 - 這樣做的壓力較小)。

+1

嘿Snorkpete感謝您的回覆。您是否熟悉多租戶Web應用程序?如果你願意,可以在某個時候選擇你的大腦。 – FlashBanistan

+0

這意味着每個用戶/賬戶都有自己的數據庫副本嗎? – snorkpete

+0

是的,有點類似於客戶在我的域名上註冊並且他們收到用戶可以註冊的子域名。基本上是共享數據庫/獨立模式或SaaS方法。 – FlashBanistan

0
  1. 將index.html文件放在templates/<project-name>目錄中。

使用這一功能來服務的index.html這是切入點的角度

def index(request): 
    return render(request, template_name='<project-name>/index.html') 
  • 把所有的角靜態文件的STATICFILES_DIRS,讓他們可以通過collectstatic命令收集。

  • 使用{{ STATIC_URL }}在靜態文件中的index.html路徑來訪問它們

  • 現在,當您要訪問的索引功能,您的角度應用程序將得到服務。

    相關問題