• Python光速入门 - Flask轻量级框架


            FlASK是一个轻量级的WSGI Web应用程序框架,Flask的核心包括Werkzeug工具箱和Jinja2模板引擎,它没有默认使用的数据库或窗体验证工具,这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单,同时提供强大的扩展性,用户可以通过添加各种扩展来增加功能,如邮件发送、用户认证、数据库集成等
            然后需要嘱咐的一个事情,一定要注意代码格式,Tab制表符和空格一定要区分开

            pip升级命令:python -m pip install --upgrade pip

    FlASK框架安装:

    1.软件版本

    Flask要求Python的版本在3.4以上

    2.创建一个工作目录

    my_python_flask(使用makdir命令)

    3.创建虚拟环境

    python -m venv myenv

    4.安装flask框架

    pip install flask其他包:


    pip install flask-login
    pip install flask-openid
    pip install flask-mail :为Flask应用程序提供SMTP接口
    pip install flask-sqlalchemy :将SQLAlchemy支持添加到Flask应用程序中
    pip install flask-mysqldb : 支持数据库操作
    pip install mysql-connector-python
    pip install flask-whooshalchemy
    pip install flask-wtf :添加了WTForms的渲染和验证
    pip install flask-babel
    pip install guess_language
    pip install flipflop
    pip install Sijax :使AJAX易于在Web应用程序中使用Python/jQuery库

     

    5.运行.bat文件

            

    6.检查安装是否成功

    pip freeze

    相关依赖解释:

    依赖名称

    依赖作用

    Werkzeug

    用于实现WGGI,应用和服务之间的标准Python接口

    Jinja

    用于渲染页面的模板语言

    MarkupSafe 与Jinja共用

    在渲染页面时用于避免不可信的输入,防止注入攻击

    ItsDangerous

    保证数据完整性的安全标志数据,用于保护Flask的session cookie

    Click

    一个命令行应用的框架,用于提供flask命令,并允许添加自定义管理命令

    FlASK框架使用:

    1.代码:

    1. from flask import Flask
    2. app = Flask(__name__)
    3. @app.route('/')
    4. def hello_world():
    5.     return 'Hello, World!'

    2.FLASK_APP环境变量

    set FLASK_APP=flaskone/main/index.py

    3.启动命令

    python -m flask run

    4.运行结果:

    调试模式:

    命令:

    set FLASK_ENV=development

    flask run --host=0.0.0.0

    路由参数以及路由参数强制转换

    @app.route('/user/')

    转换器类型

    使用

    string字符串类型

    < string:name >

    int整数类型

    < int:name >

    float小数类型

    < float:name >

    path路径类型

    < path:name >

    代码:

    1. from flask import Flask
    2. app = Flask(__name__)
    3. @app.route('/hello_world/')
    4. def hello_world(age):
    5.     return "获取的年龄是:%s" % age

    运行结果:

    Flask URL构建 + 重定向

    代码:

    1. from flask import Flask,redirect,url_for
    2. app = Flask(__name__)
    3. @app.route('/admin')
    4. def hello_admin():
    5.     return 'Hello Admin'
    6. @app.route('/guest/')
    7. def hello_guest(guest):
    8.     return 'Hello %s as Guest' % guest
    9. @app.route('/user/')
    10. def user(name):
    11.     if name =='admin':
    12.         return redirect(url_for('hello_admin'))
    13.     else:
    14.         return redirect(url_for('hello_guest',guest = name))
    15. if __name__ == '__main__':
    16.     app.run(debug = True)

    输出结果:

    浏览器访问地址:http://127.0.0.1:5000/user/admin
    浏览器输出地址:http://127.0.0.1:5000/admin

    浏览器访问地址:http://127.0.0.1:5000/user/home
    浏览器输出地址:http://127.0.0.1:5000/guest/home

    结合代码看,发现了问题所在没有?

            1.重定向的标准函数是:redirect
            2.定义的函数user,这个函数很说明问题,以后的代码延伸就是靠这个url_for方法来实现的,至于到底有什么用,相信有经验的开发者已经看出了,这个方法可以作为一个中间件使用,这点非常重要,一定要重视

    HTTP请求

            在PHP、Golang、Python等等语言中,常用请求的方式无非有以下几种,这个可以结合前面的url_for来实现Restful风格接口

    编号方法描述
    1GET将数据以未加密的形式发送到服务器,这最常用的方法。
    2HEAD与GET相同,但没有响应主体
    3POST用于将HTML表单数据发送到服务器。通过POST方法接收的数据不会被服务器缓存。
    4PUT用上传的内容替换目标资源的所有当前表示。
    5DELETE删除由URL给出的所有目标资源的所有表示

    使用方法,定义路由的时候可以定义HTTP请求方法

    1. from flask import Flask,redirect,url_for
    2. app = Flask(__name__)
    3. @app.route('/test',methods=['GET','POST','HEAD','PUT','DELETE'])
    4. def test():
    5.     return 'echo test'

    数据接收:

    3.0及以上版本使用

    data = request.form.to_dict()
    name = data.get('name')
    age = data.get('age')

    3.0以下版本使用

    age = request.agrs.get("age","21")

    1. from flask import Flask, request
    2. app = Flask(__name__)
    3. @app.route("/agrs",methods=['POST'])
    4. def agrs():
    5. data = request.form.to_dict()
    6. sex = data.get("sex")
    7. name = data.get("name")
    8. return f"姓名:{name} 性别:{sex}"
    9. if __name__ == '__main__':
    10. app.run()

    Flask 模板(模板引擎)

            Jinja2通过render_template()函数渲染HTML文件, Web模板包含用于变量和表达式(这些情况下为Python表达式)的HTML语法散布占位符,这些变量和表达式在模板呈现时被替换为值,模板引擎使用以下分隔符来从HTML转义

    {% ... %} 用于多行语句
    {{ ... }} 用于将表达式打印输出到模板
    {# ... #} 用于未包含在模板输出中的注释
    # ... ## 用于单行语句

    注意:路径示例(.py文件夹和templates一定要在同一级)

    1. from flask import Flask,render_template
    2. app = Flask(__name__)
    3. @app.route('/test')
    4. def test():
    5. dic = {"firts":1,"second":2,"thired":3}
    6. return render_template('test.html',result=dic)
    7. if __name__ == '__main__':
    8. app.run(debug = True)
    1. html>
    2. <html>
    3. <head>
    4. <title>测试数据title>
    5. head>
    6. <body>
    7. {% for key, value in result.items() %}
    8. <div>
    9. keys:<span>{{key}}span>
    10. values:<span>{{value}}span>
    11. div>
    12. {% endfor %}
    13. body>
    14. html>

    访问地址:127.0.0.1:5000/test

    会话处理:

            所谓的会话,就是客户端浏览器和服务端网站之间一次完整的交互过程。会话的开始是在用户通过浏览器第一次访问服务端网站开始。会话的结束时在用户通过关闭浏览器以后,与服务端断开。所谓的会话控制,就是在客户端浏览器和服务端网站之间,进行多次http请求响应之间,记录、跟踪和识别用户的信息而已。
            在客户端存储信息使用Cookie,token[jwt,oauth]
            在服务器端存储信息使用Session

    COOKIE


    语法:response.set_cookie("变量名", "变量值", max_age="有效期几秒")

    1. from flask import Flask, make_response, request
    2. app = Flask(__name__)
    3. @app.route('/set_cookie')
    4. def set_cookie():
    5.     response = make_response('set_cookie')
    6.     response.set_cookie('name', 'pure')
    7.     response.set_cookie('age', '18', max_age=3600)
    8.     return response
    9.         
    10. @app.route('/get_cookie')
    11. def get_cookie():
    12.     name = request.cookies.get('name')
    13.     age = request.cookies.get('age')
    14.     return "name={name}&age={age}"
    15.         
    16. @app.route("/del_cookie")
    17. def del_cookie():
    18.     response = make_response("del cookie")
    19.     response.set_cookie("name","",expires=0)
    20.     return response
    21.         
    22. if __name__ == '__main__':
    23.     app.run(debug = True)

    SESSION 


    SESSION使用session之前,必须先设置秘钥

    1. from flask import Flask, session
    2. app = Flask(__name__)
    3.  
    4. class Config(object):
    5.     SECRET_KEY = "12345678987654321"
    6.  
    7. app.config.from_object(Config)
    8.  
    9.  
    10. @app.route('/set_session')
    11. def set_session():
    12.     session["name"] = "pure"
    13.     session["age"] = 18
    14.     session["book_list"] = [{"title": "book_name"}, {"title": "book_name"}]
    15.     return "set_session"
    16.          
    17.          
    18. @app.route('/get_session')
    19. def get_session():
    20.     name = session.get("name")
    21.     age = session.get("age")
    22.     book_list = session.get("book_list")
    23.     return "name={name} & age={age} & book_list = {book_list}"
    24. @app.route('/del_session')
    25. def del_session():
    26.     if session.get("name"):
    27.         del session["name"]
    28.     return "ok"
    29. if __name__ == '__main__':
    30.     app.run(debug = True)

    数据库

    相关包:pip install pymysql

    数据库连接: 

    1. from flask import Flask
    2. import mysql.connector
    3. app = Flask(__name__)
    4. mydb = mysql.connector.connect(
    5. host="localhost",
    6. user="root",
    7. passwd="root",
    8. database="test"
    9. )
    10. mycursor = mydb.cursor()
    11. mycursor.execute("SELECT * FROM user")
    12. myresult = mycursor.fetchall() # fetchall() 获取所有记录
    13. for x in myresult:
    14. print(x)
    15. if __name__ == '__main__':
    16. app.run()

    输出结果:

    使用SQLAlchemy链接数据库

    1. from flask import Flask
    2. from flask_sqlalchemy import SQLAlchemy
    3. app = Flask(__name__)
    4. # 数据库链接地址
    5. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@127.0.0.1:3306/test'
    6. # 动态追踪修改设置,如未设置只会提示警告
    7. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    8. db = SQLAlchemy(app)
    9. class User(db.Model):
    10. id = db.Column('id', db.Integer, primary_key = True)
    11. username = db.Column(db.String(100))
    12. sex = db.Column(db.String(100))
    13. age = db.Column(db.Integer)
    14. def __init__(self, username, sex, age):
    15. self.username = username
    16. self.sex = sex
    17. self.age = age
    18. @app.route("/query",methods=['POST','get'])
    19. def query():
    20. data = User.query.all()
    21. for x in data:
    22. print(x)
    23. if __name__ == '__main__':
    24. app.run()

    输出结果:

            讲到这里,入门课程就已经讲完了,剩下的部分需要自己实操去解决问题了,以后小编会继续撰写相关文章

  • 相关阅读:
    程序员需要了解的 现代散文精选翻译
    小家电设计:小型家用电器的设计方向
    《使用EasyExcel在Excel中增加序号列的方法》
    卖不动的 iPhone 16?苹果被曝销量不达预期,甚至旧 iPhone 也能体验 Apple Intelligence!...
    pdf文件怎么转换成图片?
    Java开发一些偏冷门的面试题
    聚焦出海 长城汽车50多国家和地区经销商集团齐聚泰国车博会
    用MicroPython开发ESP32-文件传输工具-ampy
    VUE3 页面路由 router
    SpringCloud尚硅谷全部
  • 原文地址:https://blog.csdn.net/masterphp/article/details/136290855