flask框架(四)配套代码
时间:2022-06-26
本文章向大家介绍flask框架(四)配套代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
demo01blueprint.py
"""
蓝图基本使用[掌握]
- 作用: 为了进行模块化开发
- 特点: 属于flask中自带的,不需要安装扩展就能使用
- 蓝图的使用流程:
- 1.创建蓝图对象
- 2.使用蓝图装饰视图函数
- 3.将蓝图注册到app中
"""
from flask import Flask,Blueprint
from demo02product import blue
from demo03user import user_blue
app = Flask(__name__)
#3.将蓝图注册到app中
app.register_blueprint(blue)
app.register_blueprint(user_blue)
if __name__ == '__main__':
print(app.url_map)
app.run(debug=True)
demo02product.py
from flask import Blueprint
#1.创建蓝图对象
blue = Blueprint("my_blue",__name__)
#2.使用蓝图装饰视图函数
#首页
@blue.route('/')
def index():
return 'index'
#列表页
@blue.route('/list')
def list():
return 'list'
#详情页
@blue.route('/detail')
def detail():
return 'detail'
#还有其他的很多的视图函数
#.....
demo03user.py
from flask import Blueprint
#1.创建蓝图对象
user_blue = Blueprint("user",__name__)
#2.使用蓝图装饰视图函数
@user_blue.route('/user_info')
def user_info():
return "user_Info"
以包的形式使用蓝图
各个文件的关系
demo04package_Blueprint.py
from flask import Flask
from user import user_blue
app = Flask(__name__)
#3.注册蓝图到app中
app.register_blueprint(user_blue)
if __name__ == '__main__':
print(app.url_map)
app.run(debug=True)
user包的__init__.py
from flask import Blueprint
#1.创建蓝图对象
#参数1: user,表示蓝图的名字,用来标识蓝图装饰的视图函数所属的蓝图
#参数2: __name__,固定写法,表示的是蓝图所在包的名字
#参数3: static_folder,用来存储静态文件的
#参数4: url_prefix,给所有使用user_blue装饰的视图函数都加上一个访问前缀
#参数5: template_folder,表示蓝图自己的模板文件, 如果app中也设置也自己的模板,如果文件名相同,那么优先访问app的
user_blue = Blueprint("user",__name__,static_folder="static",url_prefix="/user",template_folder="templates")
print(__name__)
#导入views文件
from user import views
user包的views.py
from flask import render_template
from user import user_blue
#2.装饰视图函数
@user_blue.route('/user_login')
def user_login():
return "user_login"
#渲染模板
@user_blue.route('/register')
def register():
return render_template("file02user.html")
user包的templates文件夹的file02user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.box{
width: 300px;
height: 300px;
background: yellow;
}
</style>
</head>
<body>
<div class="box">
我是一个孤独的div
</div>
</body>
</html>
user包的static文件夹下的haha.jpg
断言:demo05assert.py
def division_number(num1,num2):
#判断num1,num2必须要整数
assert isinstance(num1,int),"num1必须是一个整数"
assert isinstance(num2,int),"num2必须是一个整数,并且不为0"
return num1/num2
# print(division_number(10,5))
# print(division_number("10",5))
print(division_number(10,"5"))
demo06unittest.py
"""
- 1.定义类,继承自unittest.TestCase
继承自TestCase的类,可以直接单独运行
- 2.编写两个固定方法
- setup: 测试开始的方法
- teardown: 测试结束的方法
- 3.编写自己的测试方法
- 必须以test开头
光标放在哪个函数的内部,就执行哪个测试方法
"""
import unittest
class MyTest(unittest.TestCase):
def setUp(self):
print("setup")
def test_login(self):
print("test_login")
def test_login2(self):
print("test_login2")
def tearDown(self):
print("teardown")
demo07databasetest.py
"""
目的: 数据库添加数据是否正常
"""
from unittest import TestCase
from demo07library import app,db,Author,Book
#1.定义类,继承自TestCase
class DatabaseTest(TestCase):
#2.编写两个固定方法setup,teardown
def setUp(self):
#设置数据库的链接信息
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/library36_test"
#创建数据库
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
#3.编写添加数据的测试方法
def test_db_addData(self):
#3.1创建作者对象
author = Author(name="laowang")
#3.2添加数据到数据库中
db.session.add(author)
db.session.commit()
import time
time.sleep(10)
#3.3查询数据
author2 = Author.query.filter(Author.name == "laowang").first()
#3.4断言
self.assertIsNotNone(author2, "取出来的作者2一定不是空")
self.assertEqual(author.name,author2.name,"两个对象中的名字必须要一样")
demo08redis.py
"""
IDE操作string[掌握]
- 操作流程:
- 1.安装扩展包
- pip install redis
- 2.导入redis类
- from redis import StrictRedis
- 3.创建redis对象,关联ip,port
- 4.调用今天学习的redis相关的方法
"""
# 2.导入redis类
from redis import StrictRedis
# 3.创建redis对象,关联ip,port,decode_responses将redis取出来的数据自动解码
redis_store = StrictRedis(host="127.0.0.1",port=6379,decode_responses=True)
# 4.调用今天学习的redis相关的方法
#增加数据,还可以设置有效期
#参数1: name,表示key
#参数2: banzhang,表示value
#参数3: 100, 表示key-value的有效期,单位是秒
redis_store.set("name","banzhang",100)
#修改数据
redis_store.set("name","laowang",100)
#获取数据
name = redis_store.get("name")
# print(name.decode())
print(name)
#删除数据
redis_store.delete("name")
demo09flask_session.py
"""
19_session指定存储位置
- 定义: 用来存储敏感信息,存储在服务器内部
- 设置: session[key] = value
- 获取: value = session.get(key)
- 注意点: 设置SECRET_KEY
- 指定session存储到redis中
- 操作流程:
- 1.安装flask_session
- pip install flask_session
- 2.导入Session类
- from flask_sessiion import Session
- 3.设置session相关的配置信息到app中
- 4.读取app身上的配置信息(和session相关的)
- Session(app)
"""
from datetime import timedelta
from flask import Flask,session
from flask_session import Session
from redis import StrictRedis
app = Flask(__name__)
#设置app的配置信息
# app.config["SECRET_KEY"] = "fdfdfdfd"
# app.config["SESSION_TYPE"] = "redis" #指定session的存储类型
# app.config["SESSION_REDIS"] = StrictRedis() #指定redis服务器的地址
# app.config["SESSION_USE_SIGNER"] = True #设置session的签名信息
# app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=10) #设置session在redis中的存储时间
#读取配置类,加载配置信息到app中
class Config(object):
SECRET_KEY = "fdfdfdfd"
SESSION_TYPE = "redis"
SESSION_REDIS = StrictRedis()
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = timedelta(seconds=10)
app.config.from_object(Config)
#读取app中关于session的配置信息
Session(app)
@app.route('/set_session')
def set_session():
session["name"] = "laowang"
return "set_session"
@app.route('/get_session')
def get_session():
value = session.get("name")
return "name is %s"%value
if __name__ == '__main__':
app.run(debug=True)
- 配置远程访问Jupyter+腾讯云超划算活动上车
- HDU 4256 The Famous Clock
- ZOJ 1403&&HDU 1015 Safecracker【暴力】
- Torch7搭建卷积神经网络详细教程
- 爬虫入门到精通-HTTP协议的讲解
- 批量替换文件名和文本文件内容mac
- 抓取手机app的数据(摩拜单车)
- Hadoop离线数据分析平台实战——520项目总结Hadoop离线数据分析平台实战——520项目总结
- 爬虫入门到精通-mongodb的基本使用
- 拒绝撕逼,用数据来告诉你选择器到底哪家强
- 爬虫入门到精通-headers的详细讲解(If-modified-since)
- Linux配置网卡
- 【爬虫军火库】生成指定日期间的日期列表
- 手把手教你安装大数据开发测试环境手把手教你安装大数据开发测试环境
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 对比讲解lambda表达式与传统接口函数实现方式
- 如何使用Java8 Stream API对Map按键或值进行排序
- TencentOS tiny RTOS快速入门
- Nginx用户认证与域名重定向
- LNMP架构介绍与搭建
- Mac 最新版Python3.7.4安装配置,设置默认python版本
- 15个应该掌握的Jupyter Notebook 使用技巧
- python 环境重启方法,系统环境变量配置后python生效设置方法
- 快速上手 WebAssembly 应用开发:Emscripten 使用入门
- Python爬虫之mongodb的索引操作
- (六)日志生成
- Python爬虫之mongodb的权限管理
- Python爬虫之mongodb和python交互
- 转录组分析 | 使用RSeQC软件对生成的BAM文件进行质控
- 转录组分析 | 使用Stringtie对数据进行下游处理