使用Django和React构建前后端分离的web应用
1.Django简介
Django是基于pyton语言的一个比较全面的框架,同样是mvc的架构模式,Django更关注于模型(Model)、模板(Template)和视图(Views),称为 MTV模式。各自职责如下:
|
层次 |
职责 |
|
模型(Model),即数据存取层 |
处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
|
视图(View),即表现层 |
处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 模型与模板的桥梁。 |
|
模板(Template),即业务逻辑层 |
存取模型及调取恰当模板的相关逻辑。 |
从以上表述可以看出Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。URLconf对于URL的规则没有任何限制,你完全可以设计成任意的URL风格,不管是传统的,RESTful的,或者是另类的。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作.在写程序的时候,只要调用相应的方法就行了,感觉很方便。程序员把控制层东西交给Django自动完成了。 只需要编写非常少的代码完成很多的事情。所以,它比MVC框架考虑的问题要深一步,因为我们程序员大都在写控制层的程序。现在这个工作交给了框架,仅需写很少的调用代码,大大提高了工作效率。
更多的Django介绍及文档请参见官方:https://www.Djangoproject.com/
2. React简介
React作为Facebook和Instagram的前端利器,从一诞生就引发了重大关注,其思想在于将前端组件化,通过组件相互包含和组合的关系构成整个document。
React不是一个MVC架构的框架,或许仅仅对应MVC中的V试图层。React 都是关于构建可复用的组件。事实上,通过 React 你唯一要做的事情就是构建组件。得益于其良好的封装性,组件使代码复用、测试和关注分离(separation of concerns)更加简单。
目前React中文文档已经比较成熟,但是由于官方更新太快,网上查到的经常是之前各种版本的教程。不过只要理解了React的思想,对于使用不同的版本,就是配置的不同了。
3. Django与React相结合
之前提到的Django是MVC架构的,那么说明Django对于视图层是有自己的定义的,那么要将React加入到Django中,着实需要配置一些东西。
到现在为止,我们假设已经安装好了Django(教程随处可见),并能启动项目。下面我们逐渐加入前端的架构。
下面我们要开始介绍一个前端利器——webpack,能够将前端文件进行打包、压缩、混淆等操作的工具,具体可查看官网:http://webpack.github.io/
利用webpack对于Django的一个工具,我们就可以实现我们想要的加入我们自己的前端框架。首先,需要使用pip安装django-webpack-loader,
pip install django-webpack-loader,然后在setting.py中加入
INSTALLED_APPS = [
...
'webpack_loader',
]
就可以在项目中使用webpack-loader给我们带来的方便。
Webpack最后将所有资源文件打包,由于django对于前端侵入比较强嘛,所以只开放一个目录给前端公有访问,需要指定在setting.py中:
STATIC_URL = '/static/' # change when production
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'app/static'), # change when production
]
主要指定django允许外界访问的资源目录。
然后我们编写webpack的config文件,将开发、部署、演示公用的config写在webpack.base.config.js中,包括前端入口、使用插件、打包原则等等,具体可查看webpack官网。
为了让我们每次运行webpack指令后生成的文件能够直接被html文件引用,就要在html中添加如下代码
{% load staticfiles %}
{% load render_bundle from webpack_loader %}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title> </title>
</head>
<body>
<div id="app">
</div>
{% render_bundle 'vendors' %}
{% render_bundle 'app' %}
</body>
</html>
然后在setting.py中添加:
WEBPACK_LOADER = {
'DEFAULT': {
'BUNDLE_DIR_NAME': 'bundles/local/',
'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats-local.json'),
}
}
经过这样的配置,每次webpack生成的资源文件都可以自动被html文件加载。那么我们就可以在django框架上加入自己的前端架构了。
浙公网安备 33010602011771号