环境安装
pip install django==1.9.7 #安装django1.97
创建项目
django-admin #列出django提供的所有命令
D:\django-admin startproject guest #创建名为guest的项目
创建应用
cd D:\guest #切换到guest目录
D:\guest\python manage.py #列出manage.py提供的所有命令,提供的命令和django-admin基本相同。
D:\guest\django-admin startapp sign #创建名为guest的应用
- 添加sign应用到guest项目中: 编辑guest/setting.py文件;
- 添加项目的路由配置:编辑guest/urls.py文件;
- 配置视图函数,向客户端显示内容:编辑sign/views.py文件;
运行项目
D:\guest\python manage.py runserver 127.0.0.1:8001 #默认以80端口启动,这里指定8001端口
在浏览器输入地址、端口就能看到运行成功的页面了!!!
django工作流
url的组成===》协议类型://IP地址:端口/路径
例如: http://127.0.0.1:8000/index
处理流程:
- 浏览器输入:http://127.0.0.1:8000/index;
- urls.py:在浏览器输入url后,django会取端口号后面的路径在urls.py中匹配;(r原始字符串防止转义,^匹配字符串开头,$匹配字符串结尾)
- views.py:根据路径匹配到相应的目录,并且将处理指向 sign 应用的视图文件 views.py 的 index 函数;
- templates:前端页面代码。
MTV开发模式
Django 里更关注的是模型(Model)、模板(Template)和视图(Views);
Django 也被称为 MTV 框架,在MTV开发模式中:
- M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效;
- T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示;
- V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁。
Cookie和session
Cookie机制:正统的cookie分发是通过扩展http协议来实现的,服务器通过在http的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资质所在的位置,则把该cookie附在请求资质的http请求头上发给服务器。
session机制:session机制是一种服务器端的机制,服务器使用一种类似于散列的结构(也可能就是使用散列表)来保存信息。
出错:
解决方法:
在对应表单里上加{% csrf_token %}
http://blog.csdn.net/huiguixian/article/details/17271617
web 接口
接口是什么?
- 程序接口:一般需要使用开发该程序接口相同的编程语言,通过传入不同的参数来验证程序接口的功能;
- 协议接口:一般指系统通过不同的协议来提供的接口,如http、soap等协议。这类接口对底层代码进行了封装,通过协议的方式对外提供调用,因为不涉及程序层面所以不受编程语言的限制,可以通过工具、编程语言对其进行测试。
接口使用场景
系统与系统之间的调用:
例如A系统调用B系统的接口进行登录系统;
上层服务对下层服务的调用:
- 应用层理解为:浏览器页面提供的功能,如按钮、输入框等;
- 服务层理解为:服务器提供的数据和逻辑处理;
- DB理:数据库,存放各种数据。访问对象,它是第一个面向对象数据访问接口,如pymysql驱动就扮演这角色。
例子:
在这个例子中各层的交互是通过接口来完成的。应用层和service层主要通过http接口,service层和DB层主要通过DAO(data access object)数据库访问接口,如python与mysql之间,pymysql就是扮演这个角色。
系统内部,服务与服务之间的调用
这块也可以看着程序与程序之间的调用。
web接口开发
开发post接口时,提示403 错误,解决方法参考:
http://blog.csdn.net/yisuowushinian/article/details/46137511
mysql 设置默认约束:
alter table 表名 alter 列名 set default 默认值;
web service
SOA(面向服务架构)不是web service,web service 是目前最适合实现SOA的技术。
SOAP 、WSDL 和 和 UDDI 就构成了 web Service 的三要素。
什么是web service?
Web Service 是一种部署在 Web 上的对象或者是应用程序组件,Web Service 数据的传输同样需要借助 HTTP 协议。下面是详细描述:
Web service 是一个平台独立的,低耦合的,自包含的、基于可编程的 web 的应用程序,可使用开放的 XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
SOAP是什么?
soap是简单对象访问协议。SOAP 是基于 XML 在分散或分布式的环境中交换信息的简单的协议。允许服务提供者和服务客户经过防
火墙在 INTERNET 进行通讯交互。
SOAP 的设计是为了在一个松散的、分布的环境中使用 XML 对等地交换结构化的和类型化的信息提供了
一个简单且轻量级的机制。
WSDL(web service 的接口文档)
Web Services Description Language,网络服务描述语言,简称 WSDL。它是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。
WSDL 文档主要使用以下几个元素来描述某个 web service :
- <portType> web service 执行的操作。
- <message> web service 使用的消息。
- <types> web service 使用的数据类型。
- <binding> web service 使用的通信协议。
UDDI
- UDDI 指的是通用描述、发现与集成服务
- UDDI 是一种用于存储有关 web services 的信息的目录。
- UDDI 是一种由 WSDL 描述的 web services 界面的目录。
- UDDI 经由 SOAP 进行通信
- UDDI 被构建入了微软的 .NET 平台
业可以通过 UDDI 来注册和搜索 Web services。
Web Service 相对于 HTTP 有什么优点?
- 接口中实现的方法和要求参数一目了然。
- 不用担心大小写问题。
- 不用担心中文 urlencode 问题。
- 代码中不用多次声明认证(账号,密码)参数。
- 传递参数可以为数组,对象等。
- Web Service 能被 HTTP 替代么? 答案是肯定的。
soap协议接口开发和测试
spyne开发接口,先安装spyne:
spyne 项目在 pypi 仓库的地址:https://pypi.python.org/pypi/spyne
cmd.exe
>python -m pip install spyne
开发一个say_hello()接口:
#spyne开发web service接口
__author__ = 'liye'
from spyne import Application,rpc,ServiceBase,Iterable,Integer,Unicode
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@rpc(Unicode,Integer,returns = Iterable(Unicode))
def say_hello(ctx,name,times):
for i in range(times):
yield u'hello,%s' %name
application = Application([HelloWorldService],'spyne.examples.hello.soap',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()
)
wsgi_application = WsgiApplication(application)
if __name__ == '__main__':
import logging
from wsgiref.simple_server import make_server
logging.basicConfig(level = logging.DEBUG)
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG) #192.168.9.100:8000本机IP和端口,使用它作为web service服务器。
logging.info('listening to http://192.168.9.100:8000')
logging.info('wsdl is at : http://192.168.9.100:8000/?wsdl')
server = make_server('192.168.9.100',8000,wsgi_application)
server.serve_forever()
测试soap协议接口:
使用sudsijurko调用web service 接口,Suds 是 Web Service 客户端是一个轻量级的基于 SOAP 的 python 客户端。但suds 2010年停止更新了,Suds-jurko 基于 Suds,它的目的是希望是原有的 Suds项目继续得到发展。
先安装Suds-jurko:Suds-jurko 项目在 pypi 仓库的地址:https://pypi.python.org/pypi/suds-jurko,下载后安装,python setup.py install
下面就是调用Web Service接口:
#测试web service soap协议接口
from suds.client import Client
url = '192.168.9.100:8000/?wsdl'
client = Client(url)
result = client.service.say_hello('haha',3)
print(result)
assert result =='hello haha'
单个soap协议接口测试如上!和http协议一样,得到了接口的返回值就可以通过 unittest 来组织用例、添加断言等进行测试了。
另外可以通过jmeter或soapUI工具进行测试soap协议接口。。
当要对响应的内容进行断言时,要先将响应内容转化为python格式的字典,才能对响应内容断言,为什么一定要先见json格式的响应转化为python字典呢?应为json的key是没有顺序的,字典可以通过内置方法获取对应的key和values,可以通过顺序断言具体某个key。
requests库中提供了一个json解码器,dicts = r.json() 这样就把json格式转为字典了;
通过json.loads()方法也可以把响应内容为json格式转为python的字典,再断言,
text = r.text() 返回原来的格式,请求和响应都是json的话 r.text也就是json,XML的话也就是XML
dicts = json.loads(text)
REST(表现层状态转换)
它是一种REST风格的web service,符合该风格原则称为restfulf架构。
什么是restful架构呢?
(1)每一个 URI 代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个 HTTP 动词,对服务器端资源进行操作,实现"表现层状态转化"。
Web Service 相关技术:
开发REST风格的web service应用
用到框架是:Django-REST-Framework,用于构建web APIS
安装:doc界面
> python3 -m pip install djangorestframework
下面是开发过程。。。。。。。
测试API
REST风格的接口测试方法和http协议的测试方法一样,python的话依然可以通过requests库对其进行测试。
测试脚本。。。。
soapUI 是一款针对 REST 和 SOAP 的功能和性能测试工具。