我们之前所测试和实现的功能都是在本地的,并不能满足我们物联网“联网”的功能,所能实现的功能和效果都是有限的。
为了实现网络远程的感知和控制,我们就需要发布Web服务,将本地Arduino板的感知和控制封装成一个接口发布出去,供其他平台调用,实现网络平台对Arduino板的控制,从而实现我们“物物联网”的效果。
搭建Web服务的方法有很多种,大家可以选择 LAMP、 LNMP 架构,或者JDK+Tomcat+JS的架构,还有基于Python的Django、Tornado、Flask、Twisted等等,根据大家掌握的技能和兴趣可以随意选择,只要能实现我们的服务发布功能就行。
本文提供一种基于Python的Django实现Web发布的方法,一是因为Python的Django框架功能强大,前景良好;二是因为我们之前的代码基本都是基于Python实现的,再用Python的WEB架构更有利于我们学习和掌握Python;还有一个重要的原因,本人不会PHP,也没学过JSP,现在正好借这个机会学一下Django...... (真是书到用时方恨少呀 ---- 。---- )
好啦,话不多说,进入正题~~~(本人做到后面发现Django太大了,有点不太适合我们的小项目,所以就转用更为轻量级的flask了,大家可以参考后面的博文。(如果对Django感兴趣,可以继续参考本文))
Django综述
Django的特点及结构
Django框架的特点
相对于Python的其他Web框架,Django的功能是最完整的,Djangi定义了服务发布、路由映射、模版编程、数据处理的一整套功能。这也意味着Django模块之间精密耦合,开发者需要学习Django自己定义的这一整套技术。
Django的主要特点如下:
- 完善的文档
- 集成数据访问组件
- 强大的URL映射技术
- 后台管理系统自动生成
- 错误信息非常完整
Django的组成结构
Django是遵循MVC架构的Web开发框架,其主要由以下几部分组成。
- 管理工具(Management):一套内置的创建站点、迁移数据、维护静态文件的命令工具。
- 模型(Model):提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。
- 视图(View):Django的视图层封装了HTTP Request 和 Response 的一系列操作和数据流,其主要功能包括URL映射机制、绑定模版等。
- 模版(Template):是一套Django自己的页面渲染模版语言,用若干内置的tags和filters定义页面的生成方式。
- 表单(Form):通过内置的数据类型和控件生成HTML表单。
- 管理站(Admin):通过声明需要管理的model,快速生成后台数据管理网站。
安装Django
在安装pip工具的Python环境后,可以直接通过pip install 命令安装Django:
# sudo pip install django
该命令将自动下载Django安装包并安装。安装完成后可以进入Python,通过如下命令验证是否安装成功:
# python
>>> import django
>>> print django.VERSION
(1, 11, 17, u'final', 0)
实战演练:开发Django站点
用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。
建立项目
在进行Django开发之前需要先用django-admin建立Django项目,语法如下:
# django-admin startproject 站点名称
其中django-admin是安装好Django组件后在Python目录中生成的Django项目管理工具。比如,建立一个叫作djangosite的开发项目,命令如下:
# django-admin startproject djangosite
该命令在当前目录下建立了一个子目录djangosite,并在其中生成了Django开发的默认文件,djangosite的目录内容如下:
djangosite/ #目录
manage.py #文件
djangosite/ #子目录
__init__.py
settings.py
urls.py
wsgi.py
默认生成的几个文件都非常重要,在今后的开发中要一直使用或者维护它们,对它们的意义解释如下:
建立应用
为了在项目中开发符合MVC架构的实际应用程序,我们需要在项目中建立Django应用,每个Django项目可以包含多个Django应用。建立应用的语法如下:
# python manage.py startapp 应用名称
其中的manage.py是建立项目时在项目目录中产生的命令行工具,startapp是命令的关键字,举例如下:
# cd djangosite //注意:cd djangosite的意思是切换到djangosite的项目下,具体的命令要根据实际目录情况来切换
# python manage.py startapp app
命令完成后会在项目目录下建立如下目录及文件结构:
app/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
对其中的文件功能解析如下:
基本视图
在完成Django项目和应用的建立后,即可开始编写网站的应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能。
1、首先在djangosite/app/views.py中建立一个路由响应函数:
from django.http import HttpResponse
def welcome(request):
return HttpResponse("<h1>Welcome to my tiny twitter!</h1>")
该代码定义了一个函数welcome(),简单地返回了一条被HttpResponse()封装的welcome信息。
2、接下来,要通过URL映射将用户的HTTP访问与该函数绑定起来。
在djangosite/app/目录中新建一个urls.py文件,管理应用app中的所有URL映射,其文件内容为:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'', views.welcome),
]
3、在项目URL文件djangosite/urls.py 的urlpatterns中增加一项,声明对应用app中urls.py文件的引用,代码如下:
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include //新增本行
urlpatterns = [
url(r'app', include('app.urls')), //新增本行
url(r'^admin/', admin.site.urls),
]
内置Web服务器
通过以上配置和编码过程,同学们应该已经迫不及待地想检验一下网站的效果了。查看网站效果首先需要通过manage.py启动Web服务器,代码如下:
# cd djangosite
# python manage.py runserver 0.0.0.0:8001
其中runserver是启动网站的关键字,后面的参数指定网站绑定的IP地址与端口号。用0.0.0.0表示绑定本机的所有IP。在命令运行的过程中将一直占用控制台,可以输入Ctrl+C组合键退出运行。
启动Web服务器后即可通过浏览器访问 http://(your ip)/app/检验欢迎信息,效果如下:
当看到上述欢迎界面之后,说明我们的第一步已经成功了。(不过一般都不会那么容易就成功了 *^*...)
第一次运行时,一般会报以下错误:
Invalid HTTP_HOST header: ‘xxx.xx.xxx.xxx:8000’. You may need to add ‘xxx.xx’ to ALLOWED_HOSTS
说明我们没有设置放行IP,服务拒绝了我们的访问。
解决办法:
修改创建项目时生成的djangosite/djangosite/setting.py文件
将 ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']
再次运行即可成功访问。
本文只是简单的创建了一个django项目和应用,还远远不能满足我们的需求,下一节将介绍 模型类 和 表单视图 ,只有合理的配置和编写了相应的文件,我们才能实现比较复杂的功能。
(本文代码文字纯手打~~如有错误和疑惑,请及时留言或QQ联系我进行修改)
(如果觉得本文还不错的话请多多留言点赞,,,谢谢~~~)