
使用Python搭建简单服务器
本文所使用的python版本是python3,那么对应的pip版本也是pip3 .如果你是用的是python2.x的话,那么对应的终端指令就需要把python3换为python,pip3换为pip.
最简(简)单(陋)的方式
使用WSGI(Web Server Gateway Interface)
Python内置支持此模块,实现WSGI接口也非常的容易,只需要开发者实现一个函数,这里是一个Web版本的”Hello,World”:
1 |
|
这里的application()方法就是符合WSGI接口标准的HTTP处理函数,此方法接收两个参数,第一个是一个接收HTTP请求参数的dict,第二个参数是一个发送HTTP响应的函数,方法内调用start_response('200 OK', [('Content-Type', 'text/html')])即发送的HTTP响应的Header,方法内的返回值就是单次HTTP请求所得到的返回值.
编写app.py文件,内容如下:
1 | from wsgiref.simple_server import make_server |
此时在终端下执行此命令:
1 | python3 app.py |
此时这个简易的服务器就启动了,可在Chrome下输入域名localhost:8000,如无意外,页面内会有Hello,web这个h1标签产生的文字.
但是,此时如果想增加一些灵活性,比如说改为localhose:8000/signin返回登录页面,此时需要做的就是在application方法内通过environ['PATH_INFO']来获得访问路径,判断访问路径来返回不同的html,作为一个像我这样懒的人,我想说—–NO WAY!!
下面是更简单的方式实现:
使用Web框架
使用Flask
使用之前需要先安装flask,终端执行:pip3 install flask,别忘了如果你使用了virtualenv虚拟环境的话需要先进入虚拟的环境再安装,否则会被安装到系统默认的python环境中.
我们需要这些模块:
1 | from flask import Flask |
有了flask只有,如何解决上面的访问路径的问题呢?其实我们可以在方法定义的时候,就决定调用此方法的请求路径(path)以及请求方法(method),比如说是主页的话,可以这样:
1 | app = Flask(__name__) |
app.route()装饰器的两个参数分别设定了访问路径,以及允许的请求方法.
但是,注意这里方法的返回值是直接把HTML字符串返回,难道需要把每个页面需要的HTML作为字符串放在python文件内吗? 不考虑其他专业性的问题,还是那句话,作为一个像我这么懒的人,我想说NO WAY!!.
模板技术
首先需要把所有页面的HTML代码写在独立的文件内,python内部使用的时候只需要引用文件并传入相应参数即可,对应这里的话就是把方法的返回值替换为return render_template('home.html'),这里的home.html文件内部把所需要的HTML内容放入即可.
那么剩下的代码:
1 |
|
这里登录与登录失败的时候,做了点小操作,重用了同一个页面,这是form.html的文件内容,注意这里在render_template()的时候使用关键字参数传入了参数,这些参数在html文件里面都有,对应的参数位置,flask默认的模板是jinja2,所以需要安装jinja2:
1 | $ pip install jinja2 |
安装完成之后,这里看一下html文件的编写:
home.html
1 | <html> |
form.html
1 | <html> |
signin-ok.html
1 | <html> |
使用Django
首先第一步需要安装django,直接使用pip安装即可:pip3 install django
现在你已经安装了django框架,然后怎么用呢?
创建项目
在终端内输入django-admin startproject mysite ,请注意,此命令会在当前目录下创建一个名为mysite的文件夹,此时此文件夹内的层级是这样的:
- mysite
- manage.py
- mysite
- __init__.py
- settings.py
- urls.py
- wsgi.py
创建了项目之后,先进入项目文件夹,然后创建web app,这些操作翻译成终端指令就是:
1 | cd mysite |
此操作会在当前文件夹下创建一个名为myapp的文件夹.myapp文件夹下的层级是这样的:
- myapp
- __init__.py
- admin.py
- models.py
- tests.py
- views.py
如果是django1.8.x以上的版本,还会有一个migrations文件夹,django 1.9.x还会在1.8的基础上多出来一个apps.py文件
此时终端下输入:
1 | python3 manage.py runserver |
然后在浏览器访问
localhost:8000,访问成功就表示配置成功了.
此时在终端内按下CTRL+C即可关闭服务器.
Hello,world
打开myapp文件夹下的views.py,这个文件当前只有一行import语句,修改源码为:
1 | from django.http.response import HttpResponse |
参数request就是浏览器访问页面时附带的请求信息,这里返回一个字符串作为请求结果.
然后再打开mysite文件夹下的urls.py ,编辑代码为:
1 | from django.conf.urls import url |
这里的urlpatterns以列表的形式定义了服务器当前可被访问的页面地址,修改之后的的文件相较之前只改了两行代码,第一行负责把刚刚编辑的views.py文件内的index方法import进来,第二行代码绑定了主页的访问函数,请注意url方法第一个参数里的正则表达式就是页面访问地址,在这里理解为,当访问主页时,就会来到index函数这里.
此时在浏览器内刷新刚才的网页,如无意外的话,页面内应该有Hello,world这句话.
在Django内使用模板
毫无疑问django也是具备模板技术的,那么如何使用模板呢?
假如说这里的需求是,可以处理类似:
localhost:8000/name这样域名后附带用户姓名的URL,可以这样写:
这里先修改一下views.py中的index方法:
1 | def index(request,name): |
这里的意思是渲染home.html这个文件,第三个参数是渲染时附带的参数,返回给用户,然后需要创建这里的html文件:
在myapp文件夹下创建文件夹templates,在此文件夹中创建文件home.html,html文件中:
1 |
|
html文件内部的表示引用在渲染模板文件时传入的uname参数.
然后再修改urls.py,把之前的
1 | url(r'^$',index,name='home') |
这行代码换为
1 | url(r'^(\w+)',index,name='home') |
这里梳理一下,views.py负责提供页面所需要的视图内容,templates文件夹下的文件则是渲染视图时用的模板文件,需要在render()函数内使用,urls.py负责规定当前app可用于访问的URL,并捕获参数传入view层.
此时再次运行服务器,即可看到效果.其实如果不停止服务器,当你项目内的文件发生修改时,只要你settings.py中的debug模式确认打开,django会自动刷新的,也就是说不用停止服务器,直接在浏览器类刷新就可以看到效果.
移动端App
这里先简单说一下,其实移动端跟web端的请求方式都是一样的,单论返回内容来讲,区别只是如果是要在App内使用的话,普遍都是需要返回给移动端一段JSON文本内容,也就是说与web端相比,我们只需要把返回的HTML修改为JSON内容就OK.
使用Flask作为移动端服务器
首先可以依靠jsonify()函数得到标准的JSON格式并返回给客户端.
这里是一个简单的示例代码:
1 | # coding:utf-8 |
此时打开浏览器访问http://localhost:5000/user/list/即可看到与这里的response_list的内容一致的JSON文本.
- 标题: 使用Python搭建简单服务器
- 作者: Aron
- 创建于 : 2016-09-20 09:15:09
- 更新于 : 2025-10-14 09:29:25
- 链接: https://likeso.github.io/2016/09/20/create-simple-web-app-using-python/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。