Django & webpack 项目结构实践
2016-10-27 13:23
471 查看
|-[root] |-[project folder] |-setting.py |-urls.py |-wsgi.py |-env.py |-[app1] |-[api] |-[service] |-api1.py |-api2.py |-[view] |-[service] |-view1.py |-view2.py |-[app] |-[main] |-main.js |-[plugin] |-[mixin] |-[helper] |-base.html |-base.js |-urls.py |-app.py |-[core] |-[decorator] |-[enum] |-[model] |-[tool] |-[midware] |-[static] |-[bundles] |-[common]
最近在研究Django和webpack集成的东西,发现使用了webpack之后,前台代码也能够模块化实在是太方便了,而且前台使用了Vue.js,使用它的template以后,很多东西都可以按component和module来维护
上面的是项目的基本脚手架,project folder里面的东西和使用django工具构建出的大题一致,只是加入了一个env.py来获取环境变量(使用docker可以方便地应用)
其次是app文件夹,里面分为了三个主要的模块——api / view / app
api用于ajax相关的接口
view用于html渲染相关的接口
app则是前端代码文件夹,因为使用了webpack,所以在这个文件夹中是各个需要的前端模块,base.html如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
{% load staticfiles %}
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
{% block extrahead %}{% endblock %}
</head>
<body>
<form action="" method="post">
{% csrf_token %}
</form>
{% block content %}{% endblock %}
</body>
</html>
base.html勾勒了大致的HTML,具体的使用
{% extends "base.html" %}
{% load render_bundle from webpack_loader %}
{% block extrahead %}
{% render_bundle 'main' 'css' %}
{% endblock %}
{% block content %}
{% verbatim %}
<div id="app"></div>
{% endverbatim %}
{% render_bundle 'main' 'js' %}
{% endblock %}
这里因为Vue.js的{{}}和django template冲突 所以使用了verbatim
这样每一个模块都可以套用统一的html模板了,通过render_bundle来导入webpack打包的模块
另外base.js则用来导入一些公用的第三方lib,而其他模块统一从base.js来导入这些第三方lib,方便管理:
var Vue = require("vue");
var VueStrap = require('vue-strap');
var uuid = require('uuid');
module.exports = {
Vue: Vue,
VueStrap: VueStrap,
uuid: uuid
}
使用:
var Vue = require('../base.js').Vue;
var VueStrap = require('../base.js').VueStrap;
后台方面,将公用部分,如数据库ORM,装饰器,django中间件移动到了core模块,又为每一个app创建相应的文件夹,这样让每一个app都更加集中于本身的功能。
每一个app有独立的urls.py
view = [
url(r'^main/', FreeMap.view.views.view_main),
]
api = [
url(r'^api/store/', FreeMap.api.main.test)
]
urlpatterns = []
urlpatterns.extend(view)
urlpatterns.extend(api)
在项目的urls.py中
from django.conf.urls import include, url
urlpatterns = [
url(r'^free-map/', include('FreeMap.urls')),
]
由此项目不需要关心app具体有什么url,而app模块内自我管理url接口
相关文章推荐
- docker & django & apache & webpack 实践
- WebPack在React项目架构中的应用实践
- 用vue+webpack搭建的前端项目结构
- 用Webpack构建Vue项目的实践
- ABAP system landscape和vue项目webpack构建的最佳实践
- 关于webpack项目资源加载优化的几个实践(以react举例)
- Vue + webpack 项目实践
- Node + Express + vue2.0 + Webpack项目实践
- vue+webpack项目结构简述(转载)
- Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
- Vue+webpack项目配置便于维护的目录结构教程详解
- webpack+vue+bootstrap项目实践
- Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
- Django & webpack & Docker & Apache 实践修正
- 【23】使用vue-cli脚手架搭建webpack项目基本结构
- Webpack创建、运行vue.js项目及其目录结构详解
- webpack项目实践
- django项目目录结构最佳实践
- 前端项目模块化的实践2:使用 Webpack 打包基础设施代码
- Vue + webpack 项目实践