demo01blueprint.py
1""" 2蓝图基本使用[掌握] 3 4- 作用: 为了进行模块化开发 5- 特点: 属于flask中自带的,不需要安装扩展就能使用 6- 蓝图的使用流程: 7 - 1.创建蓝图对象 8 - 2.使用蓝图装饰视图函数 9 - 3.将蓝图注册到app中 10 11""" 12from flask import Flask,Blueprint 13from demo02product import blue 14from demo03user import user_blue 15 16app = Flask(__name__) 17 18#3.将蓝图注册到app中 19app.register_blueprint(blue) 20app.register_blueprint(user_blue) 21 22 23if __name__ == '__main__': 24 print(app.url_map) 25 app.run(debug=True)
demo02product.py
1from flask import Blueprint 2 3#1.创建蓝图对象 4blue = Blueprint("my_blue",__name__) 5 6 7#2.使用蓝图装饰视图函数 8#首页 9@blue.route('/') 10def index(): 11 12 return 'index' 13 14#列表页 15@blue.route('/list') 16def list(): 17 18 return 'list' 19 20#详情页 21@blue.route('/detail') 22def detail(): 23 24 return 'detail' 25 26#还有其他的很多的视图函数 27#.....
demo03user.py
1from flask import Blueprint 2 3#1.创建蓝图对象 4user_blue = Blueprint("user",__name__) 5 6#2.使用蓝图装饰视图函数 7@user_blue.route('/user_info') 8def user_info(): 9 10 return "user_Info"
以包的形式使用蓝图
各个文件的关系
demo04package_Blueprint.py
1from flask import Flask 2from user import user_blue 3 4app = Flask(__name__) 5 6#3.注册蓝图到app中 7app.register_blueprint(user_blue) 8 9 10if __name__ == '__main__': 11 print(app.url_map) 12 app.run(debug=True)
user包的__init__.py
1from flask import Blueprint 2 3#1.创建蓝图对象 4#参数1: user,表示蓝图的名字,用来标识蓝图装饰的视图函数所属的蓝图 5#参数2: __name__,固定写法,表示的是蓝图所在包的名字 6#参数3: static_folder,用来存储静态文件的 7#参数4: url_prefix,给所有使用user_blue装饰的视图函数都加上一个访问前缀 8#参数5: template_folder,表示蓝图自己的模板文件, 如果app中也设置也自己的模板,如果文件名相同,那么优先访问app的 9user_blue = Blueprint("user",__name__,static_folder="static",url_prefix="/user",template_folder="templates") 10print(__name__) 11 12#导入views文件 13from user import views
user包的views.py
1from flask import render_template 2 3from user import user_blue 4 5#2.装饰视图函数 6@user_blue.route('/user_login') 7def user_login(): 8 9 return "user_login" 10 11 12#渲染模板 13@user_blue.route('/register') 14def register(): 15 16 return render_template("file02user.html")
user包的templates文件夹的file02user.html
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 .box{ 8 width: 300px; 9 height: 300px; 10 background: yellow; 11 } 12 13 </style> 14</head> 15<body> 16 17 <div class="box"> 18 我是一个孤独的div 19 </div> 20 21</body> 22</html>
user包的static文件夹下的haha.jpg
断言:demo05assert.py
1def division_number(num1,num2): 2 3 #判断num1,num2必须要整数 4 assert isinstance(num1,int),"num1必须是一个整数" 5 assert isinstance(num2,int),"num2必须是一个整数,并且不为0" 6 7 return num1/num2 8 9 10# print(division_number(10,5)) 11# print(division_number("10",5)) 12print(division_number(10,"5"))
demo06unittest.py
1""" 2- 1.定义类,继承自unittest.TestCase 3 继承自TestCase的类,可以直接单独运行 4- 2.编写两个固定方法 5 - setup: 测试开始的方法 6 - teardown: 测试结束的方法 7- 3.编写自己的测试方法 8 - 必须以test开头 9 光标放在哪个函数的内部,就执行哪个测试方法 10 11""" 12import unittest 13class MyTest(unittest.TestCase): 14 15 def setUp(self): 16 print("setup") 17 18 def test_login(self): 19 print("test_login") 20 21 def test_login2(self): 22 print("test_login2") 23 24 25 def tearDown(self): 26 print("teardown")
demo07databasetest.py
1""" 2目的: 数据库添加数据是否正常 3""" 4from unittest import TestCase 5from demo07library import app,db,Author,Book 6#1.定义类,继承自TestCase 7class DatabaseTest(TestCase): 8 9 #2.编写两个固定方法setup,teardown 10 def setUp(self): 11 #设置数据库的链接信息 12 app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/library36_test" 13 14 #创建数据库 15 db.create_all() 16 17 def tearDown(self): 18 db.session.remove() 19 db.drop_all() 20 21 #3.编写添加数据的测试方法 22 def test_db_addData(self): 23 24 #3.1创建作者对象 25 author = Author(name="laowang") 26 27 #3.2添加数据到数据库中 28 db.session.add(author) 29 db.session.commit() 30 31 import time 32 time.sleep(10) 33 34 #3.3查询数据 35 author2 = Author.query.filter(Author.name == "laowang").first() 36 37 #3.4断言 38 self.assertIsNotNone(author2, "取出来的作者2一定不是空") 39 self.assertEqual(author.name,author2.name,"两个对象中的名字必须要一样")
demo08redis.py
1""" 2IDE操作string[掌握] 3 4- 操作流程: 5 - 1.安装扩展包 6 - pip install redis 7 - 2.导入redis类 8 - from redis import StrictRedis 9 - 3.创建redis对象,关联ip,port 10 - 4.调用今天学习的redis相关的方法 11 12""" 13# 2.导入redis类 14from redis import StrictRedis 15 16# 3.创建redis对象,关联ip,port,decode_responses将redis取出来的数据自动解码 17redis_store = StrictRedis(host="127.0.0.1",port=6379,decode_responses=True) 18 19# 4.调用今天学习的redis相关的方法 20#增加数据,还可以设置有效期 21#参数1: name,表示key 22#参数2: banzhang,表示value 23#参数3: 100, 表示key-value的有效期,单位是秒 24redis_store.set("name","banzhang",100) 25 26#修改数据 27redis_store.set("name","laowang",100) 28 29#获取数据 30name = redis_store.get("name") 31# print(name.decode()) 32print(name) 33 34#删除数据 35redis_store.delete("name")
demo09flask_session.py
1""" 219_session指定存储位置 3 4- 定义: 用来存储敏感信息,存储在服务器内部 5- 设置: session[key] = value 6- 获取: value = session.get(key) 7- 注意点: 设置SECRET_KEY 8- 指定session存储到redis中 9- 操作流程: 10 - 1.安装flask_session 11 - pip install flask_session 12 - 2.导入Session类 13 - from flask_sessiion import Session 14 - 3.设置session相关的配置信息到app中 15 - 4.读取app身上的配置信息(和session相关的) 16 - Session(app) 17 18""" 19from datetime import timedelta 20 21from flask import Flask,session 22from flask_session import Session 23from redis import StrictRedis 24 25app = Flask(__name__) 26 27#设置app的配置信息 28# app.config["SECRET_KEY"] = "fdfdfdfd" 29# app.config["SESSION_TYPE"] = "redis" #指定session的存储类型 30# app.config["SESSION_REDIS"] = StrictRedis() #指定redis服务器的地址 31# app.config["SESSION_USE_SIGNER"] = True #设置session的签名信息 32# app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=10) #设置session在redis中的存储时间 33 34#读取配置类,加载配置信息到app中 35class Config(object): 36 SECRET_KEY = "fdfdfdfd" 37 SESSION_TYPE = "redis" 38 SESSION_REDIS = StrictRedis() 39 SESSION_USE_SIGNER = True 40 PERMANENT_SESSION_LIFETIME = timedelta(seconds=10) 41 42app.config.from_object(Config) 43 44 45#读取app中关于session的配置信息 46Session(app) 47 48@app.route('/set_session') 49def set_session(): 50 51 session["name"] = "laowang" 52 53 return "set_session" 54 55@app.route('/get_session') 56def get_session(): 57 58 value = session.get("name") 59 60 return "name is %s"%value 61 62if __name__ == '__main__': 63 app.run(debug=True)