iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >web开发框架Flask学习一
  • 209
分享到

web开发框架Flask学习一

框架webFlask 2023-01-30 23:01:23 209人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

flask框架 用python做web开发的三大框架特点 Django 主要特点是大而全,集成了很多的组件,例如:Admin FORM Model等,不管你用不用的到,他都会为

flask框架pythonweb开发的三大框架特点
        Django
            主要特点是大而全,集成了很多的组件,例如:Admin FORM Model等,不管你用不用的到,他都会为
            你提供,通常用于大型WEB应用,由于内部组件足够强大,所以使用DjanGo可以做到一气呵成,
           Django的优点是大而全,缺点也就露出来,这么多的资源一次性全部加载,肯定会造成cpu资源的浪费
        
        flask
            flask原生组件几乎为零,只有底层的jinja2(模板)和Werkzeug(服务器),属于短小精悍型框架,
            flask通常用于小型应用和快速构建应用,其强大的第三方库足以支持一个大型项目

        Tornado
            主要特点是原生异步非阻塞,在io密集型和多任务处理上占据压倒性的优势,属于专注性框架,通
            常用于api后端应用,游戏服务后台,其内部实现的异步非阻塞真的是很稳,优点是异步,缺点是干净,连个session也不支持
            
    什么是flask的框架
        web访问流程
        web框架
        flask简介    
    创建flask的虚拟环境
        windos下用PyCharm创建flask的虚拟环境
        windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini
        内容如下
             [global]
             index-url = https://pypi.tuna.tsinghua.edu.cn/simple
        利用pycharm的优点自动创建虚拟环境    
        
    写模板程序
        from flask import Flask

        app = Flask(__name__)

        @app.route("/")
        def index():
            return "hello Word"

        if __name__ == "__main__":
            app.run(port=9001, debug=True)
        
    Flask参数的配置
        import_name,              #相当于 __name__/"__main__"
        static_path=None,           #静态路径
        static_url_path=None,         #规定了哪种类型的url是静态请求
        static_folder='static',       #如果是静态请求,去static文件夹找文件
        template_folder='templates',    #静态模板,去templates中找模板文件
        instance_path=None,           #论坛 
        instance_relative_config=False   #应用程序的配置
        
    加载配置的方式
        DEBUG = True  设置为调试模式
        app.config.from_object()
            从对象中加载
                class Config(object):
                    DEBUG = True
                app.config.from_object(Config)    
            从配置文件中加载
                从config.ini文件中加载的内容为
                    DEBUG = True
                app.config.from_object("config.ini")
            从环境变量中加载(不推荐使用)
        常用配置的参数 
            app.debug = True
            app.config["DEBUG"] = True
            
    app.run()的三个参数
        host="127.0.0.1"
        port=9001
        debug = True
            
    JSON的数据格式
        json中的数据一定要加双引号("")
        json中的数据实际就是一种在特定格式下显示的字符串
        json中的数据一般是POST请求方式
        json常用的方法
            json.dump()
            json.dumps()   #将字典对象转化为标准格式的json字符串,没有格式化(按照代码中定义的json格式)
            json.load()
            json.loads()    #将json格式的字符串转化为Python对象(字典)
            jsonify()       #将字典对象转化为标准格式的json字符串,格式化显示 
        如果JSON数据中有中文,在浏览器显示是unicode编码,需设置如下:
            #将默认的ASCII编码屏蔽掉,才能在浏览器中显示当前json数据中的具体内容
            app.config["JSON_AS_ASCII"] = False
            
             json_data = {
                "name": "张三",
                "age": 20,
                "gender": "男"
                }
        
    重定向(redirect)
        @app.route("/redirect")
        def func_redirect():
            #跳转到百度等其他网页
            #return redirect("Http://www.baidu.com")

            #跳转到当前路径下的某个文件
            return redirect(url_for("要跳转的函数名",是否携带参数))
            
    提供模板文件(render)
        在当前路径中必许有一个文件夹叫templates,其中存放html中的模板代码,否则会有一个
        jinja2.exceptions.TenplatesNotFound的错误
        @app.route("/home")
        def home():
            return render_template("/test.html")  //直接跳转到test.html视图中
        
    自定义状态码
        如何自定义状态码
            @app.route('/login')
            def func():
                return 'login',666  #实际上是一个元祖,犹如 return("login",666)
    
    路由的参数配置
        url中参数的定义
            尖括号(<int:result>)中存放的是转换器和参数,参数的名称以及对参数类型的限制
        请求类型的指定
            默认是GET的请求模式
            app.route("",methods=["GET","POST"])   #app.route()定义规则
            用request.method获取当前请求,查看当前请求是那种请求方式
            
    自定义转换器
        自定义一个类继承BaseConverter
        重写父类的regex变量
        在app.url_map.converters这个字典中增加一组当前所定义的转换器数据(自己定义名字)
        像使用int转换器一样的使用它

     让自定义的转换器能够接收参数
          自定义一个类继承BaseConverter
          用super重写init方法,在init方法中需要有url_map这个参数以及正则表达式的参数*args,这个参数是我们在使用转换器的时候我们自己传递过来的
          在app.url_map.converters这个字典中增加一组当前所定义的转换器数据
          @app.route("/demo/<re(r'a[0-9]{6}'):uname>")
        
      BaseConverter中的其他两个参数的执行时机    
       转换器to_python
              匹配和调用的先后顺序:一定是先匹配,再调用视图函数
              to_python调用的时机:匹配了url之后,在调用视图函数之前
              to_python的作用:用来决定视图函数中的参数的值

          转换器to_url
              to_url是给url_for这个函数使用
              作用:决定url_for 中我们传递的参数,最终的地址栏中所呈现出来的状态
    
    请求错误的处理方式
        主动抛出状态码(abort)
        统一处理错误(@app.errorhandler(404/500/Exception))
    
@app.route("/")
        def index():
            return "hello word"

        @app.route("/login")
        def func_login():
            result = 4/0
            abort(404)
            return "login......"

        @app.route("/reGISter")
        def func_register():
            result = 100 + "111"
            abort(500)
            return "regsit......"

        @app.errorhandler(ZeroDivisionError)
        def errorhandler(e):
            return "除数不能为0"

        @app.errorhandler(TypeError)
        def errorhandler(e):
            return "整型和字符型的数据不能进行运算"

        @app.errorhandler(404)
        def func_browser(e):
            return "浏览器正在更新,请稍等"

        @app.errorhandler(500)
        def func_server(e):
            return "服务器繁忙,请稍后"

        @app.errorhandler(Exception)
        def errorhandler(e):
            return "页面正在加载,请稍后"

        if __name__ == "__main__":
            app.run(port=9001, debug=True)
View Code
    
钩子函数(回调函数) before_first_request 时机: 在开启服务器之后的第一次请求 before_request 时机: 每一个请求之前 使用场景: 对请求统一进行处理,比如黑名单功能 绑定IP地址remote_addr=="192.168.15.60" after_request 时机: 每一次没有报错的请求之后 场景: 统一的对没有报错的响应进行响应头信息增加,如: response.headers["Content-Type"] = "application/json" teardown_request 时机: 每一次请求之后,都会调用 场景: 对错误进行收集 request请求知识 获取请求类型:request.method #获取当前是哪一种请求方式 获取请求的ip地址:request.remote_addr #访问IP地址 获取请求的数据: request.args.get("xxx") #GET请求数据 获取URL中的参数 request.form.get("xxx") #POST请求数据 获取form表单中的数据 request.files.get("xxx") #获取文件数据 list(request.form.keys("name","pwd")) request.values.get("user") #取不到返回None request.values["user"] #直接取用户名 request.values.to_dict() #获取当前表单提交中的所有数据 request.data() #request是基于mimetype进行处理的 request.headers() print(type(request.headers)) """ Host: 127.0.0.1:5000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Referer: http://127.0.0.1:5000/home Content-Type: application/x-www-form-urlencoded Content-Length: 26 Cookie:csrftoken=vDIozqveCEfArdYXlM6goHVlSQEn7h4bDygNphL2Feas60DiM2di0jlqKfxo7xhA Connection: keep-alive Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 """ #获取当前的url路径 print(request.path) #/req # 当前url路径的上一级路径 print(request.script_root) # 当前url的全部路径 print(request.url) # http://127.0.0.1:5000/req # 当前url的路径的上一级全部路径 print(request.url_root ) # http://127.0.0.1:5000/ 注意事项 如果url和form中的Key重名的话,form中的同名的key中value会被url中的value覆盖 #http://127.0.0.1:5000/req?id=1&user=20 print(request.values.to_dict()) #{'user': 20 'pwd': 'DragonFire', 'id': '1'} 请求参数携带参数的几种方式 1、http://127.0.0.1/login/zhangan/123456          #直接在地址栏中输入 2、http://127.0.0.1/login?uname=zhangsan&upwd=123456   #利用GET请求 3、http://127.0.0.1/login                 #利用POST请求 uname=zhangsan&upwd=123456 状态的保持 http默认是无状态的,前一个请求和后一个请求之间是独立的,这个是http协议的特性 基于他的这种特性,如果想让不同请求之间可以有关联,需要引入cookie机制 设置cookie cookie是存储在浏览器端的键值字符串,会伴随着浏览器的自求自动提交到服务器,不同的网站不能共享cookie,保存在本地浏览器中安全性较低, 浏览器第一次发起登录请求该网站时,,如果服务器检测到账号和密码正确,就会给该请求设立一个cookie,浏览器会自动把cookie保存起来,
       下一次请求登录时会把该cookie带到服务器,服务器从当前请求中获取当前所使用的cookie,根据cookie就可以判断当前是谁登录
        
from flask import Flask, make_response, request
            app = Flask(__name__)

            # 存储在客户端
            @app.route("/")
            def index():
                user = request.cookies.get("user_name")
                id = request.cookies.get("user_id")
                return "%s---%s"%(user,id)

            @app.route("/login")
            def login():
                response = make_response("success")
                response.set_cookie("user_name", "zhangsan",max_age=3600)
                response.set_cookie("user_id", "2",max_age=3600)
                # return "success"
                return response

            @app.route("/logout")
            def logout():
                response = make_response("success")
                response.delete_cookie("user_name")
                response.delete_cookie("user_id")
                return response

            if __name__ == "__main__":
                app.run(port=9001, debug=True)
View Code
       设置session
            存储在服务器上,对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息在服务器端进行状态保持的方案就是session
            session依赖于cookie
from flask import Flask, session

            app = Flask(__name__)

            app.config["SECRET_KEY"] = "wxb"

            # 存储在服务器上
            @app.route("/")
            def index():
                user_id = session.get("user_id", "")
                user_name = session.get("user_name", "")
                return "%s---%s"%(user_id,user_name)


            @app.route("/login")
            def login():
                session["user_name"] = "lisi"
                session["user_id"] = "1"
                return "success"

            @app.route("/logout")
            def logout():
                session.pop("user_name",None)
                session.pop("user_id",None)
                return "success"

            if __name__ == "__main__":
                app.run(port=9001, debug=True)
View Code

    上下文管理器(类似全局变量)
        请求上下文
            request  当请求发生时,调用视图函数,触发request.get()
            session     
            抛出异常  RuntimeError:working outside of request context
        应用上下文
            current_app     
         current_app.config.get("DEBUG") g变量
         一般作用于跨py文件,先用g.num存取变量,在再另一个py文件中取值 抛出异常
         RuntimeError:working outside of application context flask_script pip install flask_script from flask import Flask flask_script import Manager app = Flask(__name__) manager = Manager(app) @app.route("/") def index(): return "hello world" if __name__ == "__main__": manager.run(debug=True) flask中可以return的几种写法   1)return "字符串"   2)return "字符串",666   3)return redirect("/")   4)response = make_response("字符串") response.set_cookie('username', username) return response 5)return render_template("demo.html",mylist=["haha","hehe"]) 6)response = make_response(render_template("index.html")) response.set_cookie('username', username) return response 7)response = redirect(url_for('transfer')) response.set_cookie('username', username) return response

 

--结束END--

本文标题: web开发框架Flask学习一

本文链接: http://www.lsjlt.com/news/180646.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • web开发框架Flask学习一
    flask框架 用Python做Web开发的三大框架特点 Django 主要特点是大而全,集成了很多的组件,例如:Admin Form Model等,不管你用不用的到,他都会为 ...
    99+
    2023-01-30
    框架 web Flask
  • web开发框架Flask学习二
    jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文件", my_...
    99+
    2023-01-30
    框架 web Flask
  • 《Flask Web开发》学习笔记
      前言:想熟练掌握一门web框架,为以后即将诞生的测试工具集做准备。为什么选择flask要做熟练掌握的一门框架,而不是其他的,最主要的原因是可以随意定制。   特别提醒:这本书的代码会提交在github,有基础的人可以直接看githu...
    99+
    2023-01-30
    学习笔记 Flask Web
  • Python Web开发用Flask还Django框架好
    本篇内容主要讲解“Python Web开发用Flask还Django框架好”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python Web开发用Flask还Django框架好”吧!是否有考虑过...
    99+
    2023-06-02
  • web框架---Flask
    Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人...
    99+
    2023-01-30
    框架 web Flask
  • Python使用Web框架Flask开发项目
    目录一、简介二、安装三、从 Hello World 开始3.1 Hello World3.2 修改Flask的配置3.3 调试模式3.4 绑定IP和端口3.5 本节源码四、获取 UR...
    99+
    2024-04-02
  • Python怎么使用Web框架Flask开发项目
    本篇内容主要讲解“Python怎么使用Web框架Flask开发项目”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么使用Web框架Flask开发项目”吧!一、简介Flask是一个轻量...
    99+
    2023-07-06
  • Python Web框架Django学习
    python web框架Django学习(二)目录: 三、Django创建APP 四、创建登录页面,实现用户交互,后台管理用户(非数据库方式)=================================================...
    99+
    2023-01-31
    框架 Python Web
  • Python如何使用Web框架Flask开发项目
    一、简介Flask是一个轻量级的基于Python的web框架。这份文档中的代码使用 Python 3 运行。 建议在 linux 下实践本教程中命令行操作、执行代码。二、安装通过pip3安装Flask即可:$ sudo pip3 insta...
    99+
    2023-05-14
    Python web Flask
  • python Web开发 flask轻量级Web框架实战项目--学生管理系统
     上次发的一篇文章,有很多朋友私信我要后面的部分,那咱们就今天来一起学习一下吧,因为我的数据库这门课选中的课题是学生管理系统,所以今天就以这个课题为例子,从0到1去实现一个管理系统。数据库设计部分我会专门出一个博客的,敬请期待吧~~~ ...
    99+
    2023-09-03
    flask python 后端
  • Flask框架(一)
    from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>hello world</h1&...
    99+
    2023-01-31
    框架 Flask
  • 我的第一个python web开发框架(
      前面ORM模块我们已经完成了开发,接下来要做的就是对项目代码进行重构了。因为对底层数据库操作模块(db_helper.py)进行了改造,之前项目的接口代码全都跑不起来了。   在写ORM模块时,我们已经对产品接口的分页查询、新增、修改...
    99+
    2023-01-30
    第一个 框架 python
  • Web开发如何学习
    这篇文章主要介绍“Web开发如何学习”,在日常操作中,相信很多人在Web开发如何学习问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Web开发如何学习”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Web开发...
    99+
    2023-06-27
  • Flask入门Web微框架HelloFlask
    目录一、安装及简单Flask1、创建示例程序2、代码分解2.1 导入并实例化了Flask类2.2 注册路由2.3启动Web服务器 前言: Flask 是一个 Python 实现的 W...
    99+
    2024-04-02
  • Python超级明星WEB框架Flask
    Flask简介Flask是一个相对于Django而言轻量级的Web框架。和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja: 策略 :werkzeug...
    99+
    2023-01-31
    框架 明星 Python
  • uni-app开发者需要学习Vue框架吗
    近年来,随着移动互联网的飞速发展,移动应用开发也逐渐成为了热门的技术领域之一,许多开发者和企业都开发自己的移动应用来提高自身的竞争力。为了满足移动应用的快速迭代和多平台开发的需求,开发者们也积极探索出了一些新的解决方案,其中uni-app就...
    99+
    2023-05-14
  • 如何学习Python Web开发?Spring框架和Apache服务器完整教程!
    Python Web开发是当今最受欢迎的技能之一。随着互联网的普及,Web开发变得越来越重要。Python Web开发是一种快速、灵活、简单的方式来创建Web应用程序。在本文中,我们将介绍如何学习Python Web开发,包括Spring...
    99+
    2023-07-25
    spring apache 教程
  • Python的哪个Web框架学习周期短,学习成本低?
    知乎上有人问,Python的哪个Web框架学习周期短,学习成本低?很多人推荐Flask,老牌轻量级web框架,确实是初学者的首选。这几天我在Github上看到FastApi,觉得比Flask更轻量。FastApi是这两年异军突起的网红web...
    99+
    2023-05-14
    Python web 框架
  • Pyhon Flask框架:第一个Flask程序
    目录创建Flask项目app.py介绍运行Flask程序总结Flask框架介绍 Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱...
    99+
    2024-04-02
  • ASP、学习笔记、Path、Laravel:如何选择最适合您的Web开发框架?
    Web开发框架是当今Web应用程序开发中不可或缺的部分,因为它们使开发者能够更快,更高效地构建Web应用程序。随着时间的推移,越来越多的Web开发框架出现在市场上,其中最受欢迎的包括ASP、学习笔记、Path和Laravel。在本文中,我们...
    99+
    2023-10-24
    学习笔记 path laravel
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作