我们之前所测试和实现的功能都是在本地的,并不能满足我们物联网“联网”的功能,所能实现的功能和效果都是有限的。
为了实现网络远程的感知和控制,我们就需要发布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感兴趣,可以继续参考本文))
相对于Python的其他Web框架,Django的功能是最完整的,Djangi定义了服务发布、路由映射、模版编程、数据处理的一整套功能。这也意味着Django模块之间精密耦合,开发者需要学习Django自己定义的这一整套技术。
Django的主要特点如下:
Django是遵循MVC架构的Web开发框架,其主要由以下几部分组成。
在安装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-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("Welcome to my tiny twitter!
")
该代码定义了一个函数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),
]
通过以上配置和编码过程,同学们应该已经迫不及待地想检验一下网站的效果了。查看网站效果首先需要通过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联系我进行修改)
(如果觉得本文还不错的话请多多留言点赞,,,谢谢~~~)