python web开发---flask

1、引入模板render_templete:render_template的功能是对先引入index.html,同时根据后面传入的参数,进行渲染

2、pycharm如何自动生成Html文档模板

输入 ! 后输入 Tab 键

3、flask框架的静态文件html应该放到根目录的  templates  文件中

return render_template("index.html")

 

        渲染文件css应该放到根目录的   /static/css/下

渲染文件用jinja2的模板导入 

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>我的首页</title>
    <link rel="stylesheet"   href="{{url_for('static',filename='css/style.css')}}">
</head>
<body>
    <h1>Python Web课程</h1>

    <h2>课程内容</h2>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</body>
</html>

4、https:默认443端口

 http:默认80端口

5、后端传递给前端数据格式  返回json:使用jsonify实现

@app.route("/getinfo")
def get_info():
    info = {
        "name":"json",
        "age":18
    }
    return  jsonify(info)

 6、标准ajax请求


 $.ajax({
type:"get",
url:'/get_data'
dataType:"json",
success: function(data){
alert("数据获取成功")
},
error:function () {
alert(""数据请求失败)
}
});
 

7、路由规则:

请求方法相同时,不同路由哪个先注册哪个先生效

请求方法不一致时,允许一个路由访问不同的视图;

同一视图函数可以用多个路由访问

8、路由跳转(redirect)中url的写法:(页面跳转)

硬编码:

反向编码(url_for)

@app.route("/home")
def login():
    #home为html页面
    url = url_for("home")
    return redirect(url)

9、路由转换器:

默认字符串规则(除了/以外的字符)

int:接受整数

float:接受浮点数

path:接受斜线

@app.route("/post/<int:post_id>")
def get_post(post_id):
    return "这是第%d篇文章" %post_id

10、自定义路由转换器:

class PhoneNum(BaseConverter):
    def __init__(self,url_map,regex):
        super().__init__(url_map)
        self.regex =regex
app.url_map.converters['re'] = PhoneNum

@app.route("/call/<re(r'1\d{10}'):phone_number>")
def call_phone(phone_number):
    return "正在拨打%s的电话" %phone_number

to_python方法:对返回的数据进行隐藏或其他操作

class PhoneNum(BaseConverter):
    def __init__(self,url_map,regex):
        super().__init__(url_map)
        self.regex =regex

    def to_python(self,value):

        return value[:3] + '****' + value[-4:]

app.url_map.converters['re'] = PhoneNum

@app.route("/call/<re(r'1\d{10}'):phone_number>")
def call_phone(phone_number):
    return "正在拨打%s的电话" %phone_number

to_url:访问127.0.0.1:5000/my_brother 跳转到/call/123****5678(类似)

class PhoneNum(BaseConverter):
    def __init__(self,url_map,regex):
        super().__init__(url_map)
        self.regex =regex

    def to_python(self,value):

        return value[:3] + '****' + value[-4:]
    def to_url(self,value):

        return value[:3] + '****' + value[-4:]

app.url_map.converters['re'] = PhoneNum

@app.route("/call/<re(r'1\d{2}\*{4}\d{4}'):phone_number>")
def call_phone(phone_number):
    return "正在拨打%s的电话" %phone_number

@app.route("/call_my_brother")
def call_my_brother():
    url = url_for("call_phone",phone_number="13755667787")
    return redirect(url)

11、前端上传文件到后端

@app.route("/upload",method=["POST"])
def upload():
    file = requests.files.get("pic")
    if file:
        file.save("./1.jpg")
        return "上传成功"
    return "上传失败"

12、通过Post表单的形式请求的数据Flask会直接解析成一个类自定的形式放到request.form中,这时request,data无法取到数据

通过post请求体的形式请求的数据可以用

request对象中包含了前端的请求数据

request.form.get  |   request.form.getlist(同名参数)

request.args.get:提取url中的参数,同时支持get跟post方式

request.args.getlist:提取url中的提取参数(含多个同名参数)

13、cookie的创建,保存,状态判断

后端
@app.route("/home")
def index():
    username = request.cookies.get('user')
    return render_template("index.html",username = username)


@app.route("/register",methods= ["POST","GET"])
def register():
    if  request.method == "GET":
        return render_template('register.html')

    elif request.method == "POST":
        username=request.form.get("username")
        password=request.form.get("password")
        print(username,password)
        resp = make_response(redirect(url_for('index')))
        resp.set_cookie("user",username,max_age=60)
        return resp

前端在Body加上判断

{% if username %}
        欢迎你回来,{{ username }} <br>
{% else %}
        游客请先<a href="/register">登录</a>
{% endif %}

14、g对象只存在于每次请求,下一次请求前清空

15、@app.before_first_request:第一次请求前

@app.before_request:每次请求前

@app.after_request:视图函数处理后执行,前提是视图不发生异常,有response参数

@app.teardown_request:无论视图是否发生异常,都会被执行

16、flask连接数据库的配置

from flask import Flask

app =Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/flask_project'
app.comfig['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.comfig['SQLALCHEMY_ECHO'] = True

17、查看数据库表结构: desc 表名

18/数据库迁移

from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager

manager = Manager(app)
migrate = Migrate(app,db)
manager.add_command('db',MigrateCommand)

19、

posted on 2020-07-03 22:02  ChanXM  阅读(247)  评论(0)    收藏  举报

导航