当前位置:网站首页>flask的笔记
flask的笔记
2022-07-30 05:38:00 【gsxdcyy】
正在学习flask,用这个来慢慢记录我的学习过程,以及一些算是感悟吧
框架
from flask import Flask
app = Flask(name)
@app.route(’/’)
def hello_world():
return ‘Hello World’
if __name__ == ‘__main__’:
app.run()
一.基础
创建一个app对象,并传递__name__参数
app = Flask(__name __)
2.设置配置项
文件形式:将配置项写入config.py文件中,导入该模块
使用方法:app.config.from_object(config)
3.传递列表
通过jsonify()将列表转为json格式的字符串
4.获取参数
http://127.0.0.1:5000/book?id=1
user_id=request.args.get(‘id’)
requests.args.get(参数名)
但是要是一个参数有多个值怎么办呢?
http://127.0.0.1:5000/book?p=1&p=4
requests.agrs.getlist(参数名)
5.url构建
url_for(‘search_sb’,sb_id=p[‘id’])
url_for():url构建 第一个参数为函数名 后面的参数为url中的变量
二.模板
一、基本使用
1.模板文件,也就是html文件,需要放到templates文件下,当然也可以在Flask(name,template_folder)来修改模板地址
2.通过render_template来渲染模板
3.如果想要传递变量到模板中,那么可以把变量定义成字典,然后再render_template中,通过关键字参数的方式传递过去,
使用:render_template('文件.html',**context)
在HTML中,用{ {变量}}实现传参
二、jinja2模板过滤器
例如{ {username|length}}
三、jinja2中的控制语句
1.if
{% if age>18 %}
<div>您已成年</div>
{% elif age<18 %}
<div>您还未成年</div>
{% else %}
<div>您刚成年</div>
{% endif %}
2.for in
1.列表
{% for skill in skills %}
<li>{
{ skill }}</li>
{% endfor %}
2.字典
{% for key,value in nicknames.items() %}
<div>{
{ key }}:{
{ value }}</div>
{% endfor %}
三.模板继承
首先我们需要一个固定的模板
比如这样的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %} </title>
</head>
<body>
<ul>
<li>
<a href="/">首页</a>
</li>
<li>
<a href="/control">控制语句</a>
</li>
<li>
<a href="/about">关于我</a>
</li>
</ul>
{% block body %}{% endblock %}
<footer style="background-color:lightslategrey">我是底部</footer>
</body>
</html>
在其他的页面中我们用extends语句来继承那个固定的模板
{% extends %}
##但是我们怎么样插入每个页面特有的东西嘞?
##用block语句开个口子,在各个HTML中可以插入到其中
模板中
{% block body %}{% endblock %}
各个HTML中
{% block body %}
各个页面不同的东西
{% endblock %}
模板中加载静态文件
1.在static文件中设置css文件

2.在css文件中写
h1{
background-color:bisque;
}
使得每个h1标签都上色
3.在模板HTML中的head中开一个口
在其他文件中可以通过url_for(‘static’,filename=‘文件路径’)导入不同的css文件
{% block head %}
<link rel="stylesheet" href="{
{ url_for('static',filename='css/index.css') }}">
{% endblock %}
三.蓝图
创建一个python package
里面将各个部分分成一个个模块,然后在每一个模块中进行操作
例如:
from flask import Blueprint,render_template
# url_prefix: url前缀
# 想要访问这个模块中的每个url都需要加上/book
bp=Blueprint("book",__name__,url_prefix="/book")
@bp.route('/list/')
def book():
return render_template('book_list.html')
总结一下基本的操作,就是:
- 导入Blueprint
- 得到Blueprint对象
bp=Blueprint(“模块名”,name,url_prefix=“前缀”) - 构建函数 (注意装饰器)
@bp.route(’/list/’)
在app模块中,导入各个模块的bp
from apps.book import bp as book_bp
from apps.course import bp as course_bp
from apps.user import bp as user_bp
然后通过register_blueprint()组装在一起
app.register_blueprint(book_bp)
app.register_blueprint(course_bp)
app.register_blueprint(user_bp )
注意!
不管是静态文件,还是渲染的html存放地位置都没有变
静态文件---->static文件夹
html----->template
四.链接数据库
1.需要的库
flask
2.数据库配置变量
HOSTNAME='127.0.0.1'
PORT ='3306'
DATABASE='cgy_flask' # 需要链接的数据库名
USERNAME='root'
PASSWORD='' #你的数据库密码
DB_URI='mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
app.config['SQLALCHEMY_DATABASE_URI']=DB_URI
在视图函数中:
@app.route('/')
def hello_world():
#写一个测试代码验证是否链接成功
engine=db.get_engine()
with engine.connect() as conn:
result=conn.execute('select 1')
print(result.fetchone())
return 'Hello World!'
创建表:
# 定义ORM模型
#继承自db.Model,db是SQLAlchemy的一个对象,Model是一个属性
class Article(db.Model):
__tablename__='article' #表的名字
#定义为整型 设置为主键 自动增长
id = db.Column(db.Integer,primary_key=True,autoincrement=True) #定义一些字段,第一个为主键id
title = db.Column(db.String(200),nullable=False)
content=db.Column(db.Text,nullable=False)
db.create_all()
增删改查:
@app.route('/article/')
def article():
#1.增
article=Article(title="陈广",content="哥")
db.session.add(article)
db.session.commit()
#2.查
ar=Article.query.filter_by(id=1)[0]
print(ar.title)
#3.改
ar = Article.query.filter_by(id=1)[0]
ar.content='hhh'
db.session.commit()
#4.删
Article.query.filter_by(id=3).delete()
db.session.commit()
return '操作成功'
边栏推荐
- 面试题 17.13. 恢复空格(字典树)
- Basic syntax of MySQL DDL and DML and DQL
- 2022 Pengcheng Cup web
- G巴士计数(Google Kickstart2014 Round D Problem B)(DAY 89)
- 75. 颜色分类
- [Mysql] CONVERT function
- Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
- 号称年薪30万占比最多的专业,你知道是啥嘛?
- list(列表)和array(数组)的区别
- Arrange numbers (DAY90) dfs
猜你喜欢
随机推荐
MySQL-Explain详解
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
839. 模拟堆
torch.optim.Adam()
MySQL的存储过程
Arrange numbers (DAY90) dfs
Pytorch to(device)
G Bus Count (Google Kickstart2014 Round D Problem B) (DAY 89)
Ranking of grades (Huazhong University of Science and Technology postgraduate examination questions) (DAY 87)
Difference between cookie and session
手把手教你彻底卸载MySQL
MySQL stored procedure
分布式事务之 Seata框架的原理和实战使用(三)
MySQL模糊查询性能优化
分布式事务之 LCN框架的原理和使用(二)
MYSQL-InnoDB的线程模型
Numpy 中 np.vstack() 和 np.hstack() 简单解析
[GStreamer] 插件的名字要和GST_PLUGIN_DEFINE匹配
面试题 17.13. 恢复空格(字典树)
2022年SQL大厂高频实战面试题(详细解析)








