代码之家  ›  专栏  ›  技术社区  ›  zmbq

在开发中将后端和前端服务放在同一个Web服务器后面

  •  2
  • zmbq  · 技术社区  · 10 年前

    我们正在开发一个web应用程序。后端用Django实现,前端用AngularJS实现。前端是用标准前端工具开发的。

    当部署到生产机器上时,前端和后端将从同一个域提供服务(我们将使用nginx作为web服务器)。然而,在开发过程中,它们位于不同的域中-lite服务器提供来自localhost:3000的前端文件,Django开发服务器处理对localhost:8000的请求。

    如何在不安装nginx或另一台成熟的服务器的情况下将两者放在同一个域上?我们不想为我们使用的每个项目或每个项目的每个分支在我们的开发机器上安装和配置nginx。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Tarun Dugar    10 年前

    我用同样的堆栈做了一个项目。在我的例子中,整个前端驻留在一个名为 静止的 在Django项目目录中。这个静态文件夹在Django项目的 设置.py 文件

    所以,发生的是第一个html文件,比如 索引.html 通过Django使用其渲染引擎提供,然后使用angular加载所有部分 uiRouter 所有这些部分都驻留在静态文件夹中,因此它们可以用作静态文件。

    除了partials之外,所有其他静态媒体(如CSS、JS和图像)也驻留在静态根中。

    的快照 索引.html :

    {% load staticfiles %}
    <html>
        <head>
            <link href="{% static 'development/assets/stylesheets/lib/normalize.css' %}" rel="stylesheet" type="text/css">
        </head>
    </html>
    

    如您所见,所有静态介质的路径都是相对于静态根定义的。静态根定义如下:

    设置.py :

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    STATIC_URL = '/static/'
    
    # Look here for `static` resource
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    

    以下是的快照 ui路由器 角度应用程序配置中定义的状态:

     $stateProvider.state("home", {
        url: "",
        controller: "HomeCtrl",
        templateUrl: "/static/development/templates/home.html"
     })