flask的笔记

正在学习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')

总结一下基本的操作,就是:

  1. 导入Blueprint
  2. 得到Blueprint对象
    bp=Blueprint(“模块名”,name,url_prefix=“前缀”)
  3. 构建函数 (注意装饰器)
    @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 '操作成功'
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gsxdcyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值