Flask框架的学习---01

news2024/11/27 8:47:36

1.工程搭建:

安装flask: pip3 install flask

 

 

终端运行:flask run 

  1. 绑定IP地址和端口:Flask run -h 127.0.0.1 -p 8083 修改端口号
  2. 生产环境:set FLASK_ENV=production
  3. 开发模式:set FLASK_ENV=development 

虽然 flask 命令可以方便地启动一个本地开发服务器,但是每次应用代码 修改之后都需要手动重启服务器。这样不是很方便, Flask 可以做得更好。如果你打开 调试模式,那么服务器会在修改应用代码之后自动重启,并且当应用出错时还会提供一个 有用的调试器。在命令行中,如果需要打开所有开发功能(包括调试模式),那么要在运行服务器之前导出 FLASK_ENV 环境变量并把其设置为 development:

2. flask框架的路由:

terminal中输入显示所有的路由:flask routes

(1)  路由定义

from flask import Flask

app = Flask(__name__)

"""
路由设置的注解路径: /index
"""
@app.route('/index',methods=['POST','GET'])
def hello_world():

    return 'Hello World!'

"""
路由的路径不能相同,每个函数对应不同的路由;不同的功能;
"""
@app.route('/return')
def return_content():
    return '你好!'
"""
启动本地服务:
"""
if __name__ == '__main__':
    '设置ip 和端口号'
    app.run(debug=True,host='127.0.0.1',port=8083)

 

(2)路由中传递参数:

除了默认字符串变量部分之外,还可以使用以下转换器构建规则:

转换器描述
string(缺省值) 接受任何不包含斜杠的文本
int接受正整数
float接受正浮点数
path类似 string ,但可以包含斜杠
uuid接受 UUID 字符串
#在路由中传递参数
@app.route('/get_name/<name>',methods=['POST','GET'])
def get_params(name):
    return '你好!' + name

(3)request 对象的使用:

HTTP请求方法:

GET以未加密的形式将数据发送到服务器,最常见的方法。
HEAD和GET方法相同,但没有响应体。
POST用于将HTML表单数据发送到服务器,POST方法接收的数据不由服务器缓存。
PUT用上传的内容替换目标资源的所有当前表示。
DELETE删除由URL给出的目标资源的所有当前表示。

参数格式:

data(请求的数据,类型为string)

form(表单的数据)、

args(记录请求中的查询参数?号后面的参数)

headers

method(get\post)

cookies

url

files:文件类型;上传图片

(4)响应对象:response:

返回模板:render_template() :返回一个模板文件

重定向redirect:  跳转到其他的路由

返回json数据: ( json.load() :读json 文件)

 json.dumps() :写json文件;

 jsonify() :返回为json,同时设置响应头;

Cookie使用:

 得到cookie:

Session使用:保存前端提交的状态的数据;存放在浏览器服务器上;

1.设置session:

2.得到session:session.get() :

 

abort函数的使用:异常处理函数;

  • 使用类似于python中的raise函数,可以在需要退出请求的地方抛出错误,并结束该请求;
  • 我们可以使用app.erroehandler装饰器来进行异常的捕获与自定义:
from flask import Flask,render_template,request,abort

app = Flask(__name__)

@app.route("/",methods=['GET','POST'])
def index():
    if request.method == 'GET':
        return render_template('index.html')
    elif request.method == 'POST':
        name = request.form.get('name')
        password = request.form.get('password')
        if name == 'zhangsan' and password == '123456':
            return 'login sucess'
        else:
            # abort的用法类似于python中的raise,在网页中主动抛出错误
            abort(404)
            return None



# 自定义错误处理方法,将404这个error与Python函数绑定
# 当需要抛出404error时,将会访问下面的代码
@app.errorhandler(404)
def handle_404_error(err):
    # return "发生了错误,错误情况是:%s"%err
    # 自定义一个界面
    return render_template('404.html')

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

url_for实现反转:

url_for是实现url反转的工具,即视图函数→url;
静态文件引入:url_for('static', filename='文件路径')

(5)请求钩子:

中间件(中间件对所有的view都起作用:):是一个类,然后定义pre-process、after-process方法;

请求处理的过程:pro-process----view -----after-process------>(return response)

请求钩子的类别:

  1. before_request:在每一次请求之前调用;
  2. before_first_request:与before_request的区别是,只在第一次请求之前调用;只调用一次
  3. after_request每一次请求之后都会调用;
  4. teardown_request每一次请求之后都会调用;

请求钩子执行顺序:

before-first-request-----before-request----after-request-------teardown-request(接近结尾处理)

3. flask框架的视图:

(1) add_url_rule的初登场

欲实现url与视图函数的绑定,除了使用路由装饰器@app.route,我们还可以通过add_url_rule(rule,endpoint=None,view_func=None)方法

rule:设置的url

endpoint:给url设置的名称

view_func:指定视图函数的名称

(2) 视图函数和类视图:

类视图的引入

之前我们所定义的视图都是通过函数来实现的,所以称之为视图函数,但其实视图还可以由类来实现,即类视图

标准类视图:

定义时需要继承flask的views.View这一基类;
每个类视图内必须包含一个dispatch_request方法,每当类视图接收到请求时都会执行该方法,返回值的设定和视图函数相同;
区别:

视图函数可以通过@app.route和app.add_url_rule来进行注册(映射到url),但类视图只能通过app.add_url_rule来注册,注册时view_func不能直接使用类名,需要调用基类中的as_view方法来为自己取一个“视图函数名”

from flask import Flask,render_template,views

app = Flask(__name__)

# 定义父视图类继承基类View
class Ads(views.View):
    def __init__(self):
        super(Ads, self).__init__()
        # 实例属性
        self.context={
            'ads':'这是对联广告!'
        }

# 定义子视图类继承父类并实现工程
class Index(Ads):
    def dispatch_request(self):
        # 字典传参方式==不定长的关键字传参
        return render_template('class_mould/index.html',**self.context)
class Login(Ads):
    def dispatch_request(self):
        # 字典传参方式==不定长的关键字传参
        return render_template('class_mould/login.html',**self.context)
class Register(Ads):
    def dispatch_request(self):
        # 字典传参方式==不定长的关键字传参
        return render_template('class_mould/register.html',**self.context)

# 注册我们创建的类视图,as_view给类视图起名
app.add_url_rule(rule='/',endpoint='index',view_func=Index.as_view('index'))
app.add_url_rule(rule='/login/',endpoint='login',view_func=Login.as_view('login'))
app.add_url_rule(rule='/register/',endpoint='register',view_func=Register.as_view('register'))

if __name__=='__main__':
    print(app.view_functions)
    app.run(debug=True)

(3) 蓝图的使用:
一个蓝图就是一个模块;视为一种容器对象;有自己的模板文件、静态文件等;

蓝图使用方式:创建蓝图和注册蓝图。

 蓝图内部的静态文件: static_folder:静态文件夹

 4. jinja2模板引擎:

5. flask数据交互:

6. flask访问数据库:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/475027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT真的有那么牛吗?

ChatGPT真的有那么牛吗&#xff1f;ChatGPT真的有那么牛吗&#xff1f; 作为一款大型语言模型&#xff0c;ChatGPT确实具有很高的自然语言处理和生成能力&#xff0c;可以生成流畅、准确和有逻辑性的语言&#xff0c;而且能够理解和回答广泛的问题。 它是目前最先进和最强大的…

《HelloGitHub》第 85 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …

奇舞周刊第 491 期 初探 Web 客户端追踪技术

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 初探 Web 客户端追踪技术 浏览器的追踪技术是一把双刃剑&#xff0c;它建立了用户个人信息和网站之间的连接&#xff0c;合理地使用能够大大提高用户的体验&#xff0c;但是同时也…

【测试开发】第二节.测开基础篇

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;Java测试开发 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 一、软件测…

盈泰德带你了解产品表面缺陷检测系统

与前几年相比&#xff0c;机器视觉行业在表面检测方面有了很大的突破。检测产品表面的划痕、污渍不再困难&#xff0c;广泛应用于金属、玻璃、手机屏幕、液晶面板等行业的表面检测。 机器视觉检测有以下四种常用的检查和照明方法&#xff1a; 同轴照明、低角度照明、背光照明…

最全最简单scrapy框架搭建(附源码案例)

最近在做项目中,需要网页的大批数据,查询数据是一项体力劳动,原本的我 然而,奋斗了一天的我查到的数据却寥寥无几,后来的我是这样的 作为一个cv工程师,复制粘贴原本是一件很快乐的事情但是它缺给了我无尽的折磨,所以我利用4天时间查询各种资料,翻阅各种视频,终于了解了一个面向…

【五一创作】[论文笔记]图片人群计数CSRNet,Switch-CNN

2018(有代码)_CSRNet (10次) 应用最最广泛的&#xff1a;e, is the most widely used while working with counting problems. 2018_CVPR——CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes https://arxiv.org/abs/1802.100…

[遗传学]近亲繁殖与杂种优势

目录 近交与杂交的遗传学效应 (1) 近交使基因纯和,杂交使基因杂合 近交效应: (2) 近交系数与亲缘系数 (3)运用通径分析方法计算近交系数和亲缘系数 ① 通径与通径链 ② 通径分析的理论及其应用 (4)近交降低群体基因型值的平均值,杂交提高群体均值 (5)近交使群体分化,杂…

mysql卸载及Ubuntu降级mysql并安装MySQL5.7并修改键盘失灵问题及 centos_x86.64安装MySQL5.7及修改密码及设置访问

卸载mysql 可以看centos_x86.64安装MySQL5.7标题的卸载 查看MySQL的依赖项 dpkg --list|grep mysql 卸载 mysql-common sudo apt remove mysql-common 卸载 mysql-server sudo apt autoremove --purge mysql-server 清除残留数据 dpkg -l|grep ^rc|awk ‘{print$2}’|sudo …

java.lang.NoSuchFieldException: TYPE

环境: IDEA 2022.1.4 SQL 2012 今日启动SpringBoot项目&#xff0c;出现 Initializing Spring embedded WebApplicationContext。 启动失败&#xff0c;我百度了下&#xff0c;说可能是下了断点&#xff0c;可我没有下断点。 2023-04-29 15:40:02.039 INFO 13676 --- [ …

Vue.js按键修饰符及v-model修饰符

目录 一、按键修饰符 &#xff08;1&#xff09;回车键按键修饰符示例 &#xff08;2&#xff09;自定义按键修饰符示例 二、v-model修饰符 &#xff08;1&#xff09;.lazy &#xff08;2&#xff09;.number &#xff08;3&#xff09;.trim 一、按键修饰符 v-on指令用…

【计算机图形学】三维图形投影和消隐(正等轴测投影图 消隐图构造)

模块4-2 三维图形投影和消隐 一 实验目的 编写三维图形各种变换的投影或消隐算法 二 实验内容 1&#xff1a;自行选择三维物体&#xff08;不能选长方体&#xff09;&#xff0c;建立坐标系&#xff0c;给定点的三维坐标值&#xff0c;建立边表结构&#xff0c;完成正等轴测…

【VM服务管家】VM4.x算法模块开发_4.2 联合OpenCV开发

目录 4.2.1 环境配置&#xff1a;使用OpenCV开发的环境配置4.2.2 图像类算法&#xff1a;使用OpenCV开发算法模块的方法 4.2.1 环境配置&#xff1a;使用OpenCV开发的环境配置 描述 环境&#xff1a;VM4.0.0及以上 VS2013 现象&#xff1a;使用第三方库OpenCV开发时&#xff…

记录-做一个文件拖动到文件夹的效果

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在我的电脑中&#xff0c;回想一下我们想要把一个文件拖动到另一个文件夹是什么样子的呢 1:鼠标抓起文件 2:拖动文件到文件夹上方 3:文件夹高亮&#xff0c;表示到达指定位置 4:松开鼠标将文件夹放入文…

ChatGPT能让智能客服更上一层楼么?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 现实生活中&#xff0c;智能客服的身影已随处可见。 随着全球经济从以产品为主向以服务为主转型&#xff0c;体验经济也快速发展。客户服务逐渐成为一个独立的产业&#xff0c;而客服中心也成为所有企业的基本部门。然而&am…

港科夜闻|香港科技大学校董会主席沈向洋院士一行到访香港科大(广州)

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学校董会主席沈向洋院士一行到访香港科大(广州)。沈向洋院士于2023年3月6日起担任香港科大校董会主席&#xff0c;这是他上任以后首次率队到访香港科大(广州)。这也标志着&#xff0c;两校将继续坚定不移地在“…

JavaEE——单例模式

文章目录 一、介绍什么是单例模式二、饿汉模式三、懒汉模式四、讨论两种模式的线程安全问题 一、介绍什么是单例模式 在介绍单例模式之前&#xff0c;我们得先明确一个名词设计模式。 所谓设计模式其实不难理解&#xff0c;就是在计算机这个圈子中&#xff0c;呢些大佬们为了…

驾考系统C#winform驾照考试系统

驾考系统C#winform驾照考试系统 c#&#xff0c;sqlite&#xff0c;winform &#xff0c;.net framwork4.0驾照考试系统 有兴趣的朋友可以修改源代码玩玩!我用的数据库是sqlite &#xff08;随着我国社会的不断进步和发展&#xff0c;越来越多的家庭拥有汽车&#xff0c;人们…

[linux-sd-webui]api之dreambooth训练

https://gitee.com/leeguandong/dreambooth-for-diffusionhttps://gitee.com/leeguandong/dreambooth-for-diffusionhttps://zhuanlan.zhihu.com/p/584736850https://zhuanlan.zhihu.com/p/584736850这个库使用的是diffusers库&#xff0c;现在主要就是kohya-ss/sd-scripts混合…