树莓派(九)——在树莓派上用Django搭建Web服务(上)

我们之前所测试和实现的功能都是在本地的,并不能满足我们物联网“联网”的功能,所能实现的功能和效果都是有限的。

为了实现网络远程的感知和控制,我们就需要发布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联系我进行修改)

(如果觉得本文还不错的话请多多留言点赞,,,谢谢~~~)

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值