Flask

 简介

  • django是个大而全的框架,flask是一个轻量级的框架
  • django内部为我们提供了非常多的组件:orm/session/cookie/admin/form/modelform/路由/视图/模板/中间件/分页/auth/contenttype/缓存/信号/多数据库连接
  • flask框架本身没有太多的功能,路由/视图/模板(jinja2)/session/中间件,第三方组件非常齐全
  • django的请求处理是逐一封装和传递:flask的请求是利用上下文管理来实现的

flask快速使用

安装: pip install flask

1.1依赖wsgi Werkzeug

from werkzeug.serving import run_simple
def func(envi,a):
    print('请求来了')
    pass
if __name__ == '__main__':
    run_simple('127.0.0.1',5001,func)

 1.2快速使用flask

Flask_第1张图片

 

//app.py
from flask import Flask

#使用Flask类创建一个app对象
#__name __代表当前app.py这个模块
#1.以后出现bug,它可以帮助我们快速定位
#2.对于寻找模板文件,有一个相对路径
app = Flask(__name__)
#创建一个路由和视图函数的映射
@app.route("/")
def hello_world():
    return 'hello world'
if __name__=='__main__':
    app.run()

用户登录

c3c05bffc1e74593a52c3a09b5c88fb8.png

 

from flask import Flask, render_template, jsonify, request, redirect

app = Flask(__name__,template_folder="templates")#默认
@app.route('/login',methods=['GET','POST'])
def login():
    #return '登录' #HttpResponse
    # return jsonify({'code':1000,'data':[1,2,3]})#JsonResponse
    if request.method=='GET':
        return render_template('login.html')  #render
    user=request.form.get('user')
    pwd=request.form.get('pwd')
    if user=='changxin' and pwd=='dsb':
        return redirect('/index')
    error='用户名或密码错误'
    return render_template('login.html',**{'error':error})#或者error=error
@app.route('/index')
def index():
    return '首页'
if __name__ == '__main__':
    app.run()



    
    Title


    

用户登录

{{error}}

项目配置

Debug模式

开启debug模式

我开启后刷新无效?

host配置

主要作用:就是让其他电脑访问我电脑上的flask项目

Flask_第2张图片

 post

上图中后面添加 --port=8000(注意空格隔开)

url视图

Flask_第3张图片

 带参数的url

@app.route("/blog/")
def blog_detail(blog_id):
    return "您访问的博客是:%s" %blog_id

查询字符串的方式传参

/book/List:会给我返回第一页的数据

/book/List?page=2,获取第二页的数据

 

@app.route('/book/list')
def book_list():
    #arguments:参数
    #request.args:类字典类型
    page=request.args.get("page",default=1,type=int)
    return f"您获取的是第{page}的图书列表!"

jinja2模板使用

Flask_第4张图片

 

from flask import Flask,render_template

app = Flask(__name__)
#url:http/https://www.qq.com

@app.route('/')
def hello_world():  # put application's code here
    return render_template("index.html")
if __name__ == '__main__':
    app.run()

html自动生成标签:书写div然后按tab自动补全

 后端传参

@app.route('/blog/')
def blog_detail(blog_id):
        return render_template("blog_detail.html",blog_id=blog_id)

blog_detail.html

{{blog_id}}

模板的对象属性

class User:
    def __init__(self,username,email):
        self.username=username
        self.email=email

@app.route('/xiao')
def hello_world():
    user=User(username="芬达",email="学霸")
    return render_template("index.html",user=user)
{{ user.username}}

字典引用{{person["key"]}}或者{{person.key}}

过滤器的使用

 

{{person.key|length}}

自定义过滤器

def datetime_format(value,format="%Y-%m-%d %H:%M" ):
    return value.strftime(format)
app.add_template_filter(datetime_format,"dformat")
def filter_demo():
    mytime=datetime.now()
    return render_template("index.html",mytime=mytime)
{{mytime|dformat}}

控制语句

@app.route('/xiao')
def hello_world():
    age=19
    return render_template("index.html",age=age)

Flask_第5张图片

 

@app.route('/xiao')
def hello_world():
    age=19
    books=[{"name":"小木",
            "age":15
            },
           {"name":"小bing",
            "age":18
            }]
    return render_template("index.html",age=age,books=books)
    {% for book in books %}
        
名字:{{ book.name}},年龄:{{ book.age }}
{% endfor %}

模板继承

base.html




    
    这是父模板


我是父模板的文字

child.html

{% extends "base.html" %}

app.py

@app.route('/xiao')
def hello_world():
    return render_template("child.html")

{%block%}

base.html

{%block title%}{%endblock%}

    {%block body%}
    {%endlock%}

child.html

{% block  title%}
    我是父模板的标题
{% endblock %}
{% block  body%}
    我是父模板的body
{% endblock %}

 

 加载静态文件

Flask_第6张图片

 

对象关系模型ORM

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text


app = Flask(__name__)

HOSTNAME="127.0.0.1"
PORT=3306
USERNAME="root"
PASSWORD="15175857475a"
DATABASE="xiao"
app.config["SQLALCHEMY_DATABASE_URI"]=f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
#在app.config中设置好链接数据库的信息
#然后使用SQLAlchemy(app)创建一个db对象
#SQLAlchemy会自动读取app.config中链接数据库信息
db=SQLAlchemy(app)
#测试是否链接成功
# with app.app_context():
#     with db.engine.connect() as conn:
#         rs = conn.execute(text("select 1"))
#         print(rs.fetchone())
class User(db.Model):
    __tablename__ = "user"
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    username=db.Column(db.String(100),nullable=False)
    password=db.Column(db.String(100),nullable=False)
user=User(username="法外",password='11111')
with app.app_context():
    db.create_all()
@app.route('/')
def hello_world():
    return "hello"

if __name__ == '__main__':
    app.run()

数据的增删改查操作

@app.route("/user/add")
def add_user():
    #1.创建ORM对象
    user = User(username="法外", password='11111')
    #2.将ORM对象添加到db.session中
    db.session.add(user)
    #3.将db.session中的改变同步到数据库中
    db.session.commit()
    return "用户创建成功"

@app.route("/user/query")
def query_user():
    #1.get查找:根据主键查找
    user=User.query.get(1)
    print(f"{user.id}:{user.username}{user.password}")
    #2.filter_by查找
    users=User.query.filter_by(username="法外")
    for user in users:
        print(user.username)
    return "数据查找成功"

@app.route("/user/update")
def update_user():
    user=User.query.filter_by(username="法外").first()
    user.password="2222222"
    db.session.commit()
    return "数据修改成功"

@app.route("/user/delete")
def delete_user():
    user=User.query.get(1)
    db.session.delete(user)
    db.session.commit()
    return "数据删除成功"

表关系

class Article(db.Model):
    __tablename__="article"
    id=db.Column(db.integer,primary_key=True,autoincrement=True)
    title=db.Column(db.String(200),nullable=False)
    content=db.Column(db.Text,nullable=False)
    #添加作者的外键
    author_id=db.Column(db.Integer,db.ForeignKey("user.id"))
    author=db.relationship("User")
article=Article(title="Flask",content="pig")

 

 

你可能感兴趣的:(flask,python,后端)