蓝图
蓝图进行模块化开发的使用流程:
1.创建蓝图对象(容器)
2.装饰视图函数(装视图函数)
3.注册蓝图到app中(添加到app)
副模块中
from flask import Blueprint
# 1.创建蓝图对象
#参数1: 蓝图名称
#参数2: 表示模块名称
#参数3: url_prefix,视图函数访问前缀
#参数4: static_folder,静态资源文件夹
#参数5:模板文件所在的文件夹
user_blu = Blueprint("user",__name__,url_prefix='/user',static_folder='static',template_folder="templates")
product_blu = Blueprint("product",__name__)
Blueprint是继承自Flask类,和app一样的功能
pruduct是这个蓝图对象的标识名
# 2.装饰视图函数
@product_blu.route('/get_detail')
def detail():在url_map返回的是标识名.函数名
return "<script>alert('你傻x')</script>"
主模块中:
from flask import Flask
from demo05product import product_blu
app = Flask(__name__)
# 3.注册蓝图到app中
app.register_blueprint(product_blu)
if __name__ == '__main__':
print(app.url_map)
app.run(debug=True)
单元测试
常用的断言方法:
assert: 断言, 判断条件是否成立
格式: assert boolean表达式1, 异常信息
如果表达式1为True, 正常执行程序
如果表达式1为False, 报错异常信息,停止程序
assert isinstance(num1,int),"num1必须是int类型"(报出的异常信息)
assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass
assertIsNotNone 存在,则pass
setUp: 测试案例执行前执行,适合做初始化操作,数据库创建
tearDown: 测试结束后,关闭会话,删除数据库,关闭IO流
测试方法(案例): 必须以test开头
注意点:
测试方法执行的时候,与位置有关
import unittest
class TestClass(unittest.TestCase):
#该方法会首先执行,相当于做测试前的准备工作
def setUp(self):
print("setup")
#该方法会在测试代码执行完后执行,相当于做测试后的扫尾工作
def tearDown(self):
print("tearDown")
#测试代码
def test_app_exists(self):
# self.assertEqual(1,2,"两者必须相等")
# result = {
# "errcode": -2,
# "errmsg": "params error"
# }
# self.assertIn("errcode10",result,"字典中必须包含errcode key")
# self.assertIsNotNone("haha","对象不能为空")
pass
def test_app(self):
print("test_app")
补充知识点:
cookie:
cookie是为了辨别用户身份,进行会话追踪而储存在用户本地的数据(通常进行加密).
* Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookie的key/value保存,下次请求同一网站时就发送该Cookie给服务器.
* Cookie中的key/value可以由服务器端自己定义。
Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用
Cookie基于域名安全,不同域名的Cookie是不能互相访问的
如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息
浏览器的同源策略
当浏览器请求某网站时,会将本网站下所有Cookie信息提交给服务器,所以在request中可以读取Cookie信息
session:
对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息,所以可以使用session进行保存
在服务器端进行状态保持的方案就是Session
flask response对象
mimt-type说穿了其实指的就是文件后缀名。
你向web服务器请求一个文件,服务器会根据你的后缀名去匹配对应的值设置为response中content-type的值。
而content-type是正文媒体类型,游览器根据content-type的不同来分别处理你返回的东西。
text/html(默认的,html文件)
text/plain(纯文本)
text/css(css文件)
text/javascript(js文件)
application/x-www-form-urlencoded(普通的表单提交)
multipart/form-data(文件提交)
application/json(json传输)
application/xml(xml文件)
字典转json(字符串):
dict = {
“name”:”banzhang”,
“age”:13
}
josn_data = json.dumps(dict)
json转字典:
dict_data = json.loads(json_data)