Flask入门二(Flask的CBV、模版语法、请求和响应)

news/发布时间2024/9/20 9:10:48

文章目录

  • 一、Flask的CBV
    • 1.CBV的写法
    • 2.as_view的执行流程
    • 3.Login.as_view(name=‘index’) name到底有什么用?
    • 4.CBV中得methods作用
  • 二、模版语法
    • 1.渲染变量
    • 2.变量的循环
    • 3.逻辑判断
  • 三、请求和响应

一、Flask的CBV

1.CBV的写法

from flask import Flask
app = Flask(__name__)
app.debug = True# FBV的写法
@app.route('/')
def index():return 'hello'# CBV的写法
from flask.views import MethodView
class TestView(MethodView):def get(self):return '我是get'def post(self):return '我是post'# 注册路由
# as_view必须加一个字符串---》是路由的别名
# endpoint 和 as_view(name= 路由别名),以谁为准?
# 读源码后,知道了,以 endpoint 为准
# 如果endpoint 没传--》endpoint是 view_func.__name__ 视图函数的名字 ,别名就是函数名
# 如果endpoint 没传,as_view(name= 路由别名)也没传---》去视图函数名字-->视图函数都是:view
# as_view(name= 路由别名) 有什么用? 把view的名字改为了,你传入的字符串名
app.add_url_rule('/test', 'test', TestView.as_view('test'))if __name__ == '__main__':app.run()

在这里插入图片描述

2.as_view的执行流程

	把源码精简一下def as_view(cls, name, *class_args, **class_kwargs):def view(**kwargs):return self.dispatch_request(**kwargs)return viewdef dispatch_request(self, **kwargs):meth = getattr(self, request.method.lower(), None)return meth(**kwargs) 请求来了,路由匹配成功,会执行as_view内的view() 也执行了类中的self.dispatch_request....这个就跟我们Django中的CBV一样了然后看到self.dispatch_request中方法 ,在当前视图类中反射,请求方式的小写字符串(get,post),如果我们写了这些方法 就会去执行。

3.Login.as_view(name=‘index’) name到底有什么用?

	先研究endpoint有什么用,正常的fbv,如果不写endpoint会以函数名作为别名endpoint如何设置的?如果endpoint为None,它把函数名作为了endpointif endpoint is None:endpoint = _endpoint_from_view_func(view_func)	# view_func.__name__options["endpoint"] = endpoint		# 如果都是endpoint就会冲突Login.as_view(name='index'),name到底有啥用app.add_url_rule('/login', view_func=Login.as_view('login'))没有传endpoint,Login.as_view('login')是view函数的内存地址endpoint会以函数名作为endpoint的值,现在所有函数都是view,必须传入name,来修改调view函数的名字如果传了endpoint,别名以endpoint为主,如果不传endpoint,别名以name为主app.add_url_rule('/login', view_func=Login.as_view(name='login'),endpoint='xxx')

4.CBV中得methods作用

	视图类中有个属性就是methods = ['GET', 'POST']用来控制允许的请求方式 写了什么方法 就允许什么请求 若没有写则不能使用该方法

二、模版语法

1.渲染变量

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>用户列表</h1><table>{% for k,v in user_dict.items() %}<tr><td>{{k}}</td><td>{{v.name}}</td><td>{{v['name']}}</td><td>{{v.get('name')}}</td><td><a href="/detail/{{k}}">查看详细</a></td></tr>{% endfor %}</table>
</body>
</html>

2.变量的循环

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>用户列表</h1><table>{% for k,v in user_dict.items() %}<tr><td>{{k}}</td><td>{{v.name}}</td><td>{{v['name']}}</td><td>{{v.get('name')}}</td><td><a href="/detail/{{k}}">查看详细</a></td></tr>{% endfor %}</table>
</body>
</html>

3.逻辑判断

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>用户列表</h1><table>{% if name %}<h1>Hello {{ name }}!</h1>{% else %}<h1>Hello World!</h1>{% endif %}</table>
</body>
</html>

比django中多可以加括号,执行函数,传参数

	from flask import Flask,render_template,jsonify,make_responsefrom markupsafe import Markupapp = Flask(__name__, template_folder='temp')def func1(arg):return Markup("<input type='text' value='%s' />" %(arg,))@app.route('/')def index():return render_template('index.html',ff = func1)if __name__ == '__main__':app.run()index.html<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>{{ff('六五')}}{{ff('六五')|safe}}</body></html>注意:1.Markup等价django的mark_safe ,2.extends,include一模一样

三、请求和响应

	from flask import Flaskfrom flask import requestfrom flask import render_templatefrom flask import redirectfrom flask import make_responseapp = Flask(__name__)@app.route('/login.html', methods=['GET', "POST"])def login():'请求(request,http请求中的东西,都能从request中取出来)'1.请求相关信息# request.method  提交的方法# request.args  get请求提及的数据# request.form   post请求提交的数据# request.values  post和get提交的数据总和# request.cookies  客户端所带的cookie# request.headers  请求头# request.path     不带域名,请求路径# request.full_path  不带域名,带参数的请求路径# request.script_root  # request.url           带域名带参数的请求路径# request.base_url		带域名请求路径# request.url_root      域名# request.host_url		域名# request.host			127.0.0.1:500# request.files# obj = request.files['the_file_name']# obj.save('/var/www/uploads/' + secure_filename(f.filename))'响应'2.响应相关信息# return "字符串"# return render_template('html模板路径',**{})# return redirect('/index.html')#return jsonify({'k1':'v1'})# response = make_response(render_template('index.html'))# response是flask.wrappers.Response类型# response.delete_cookie('key')# response.set_cookie('key', 'value')# response.headers['X-Something'] = 'A value'# 向响应头中添加res = make_response('hello')res.headers['xx'] = 'll'# return responseretrun resreturn "内容"if __name__ == '__main__':app.run()

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 解析:探寻 AI 绘画背后的科技神秘

AI 绘画发展史 在谈论 Stable Diffusion 之前&#xff0c;有必要先了解 AI 绘画的发展历程。 早在 2012 年&#xff0c;华人科学家吴恩达领导的团队训练出了当时世界上最大的深度学习网络。这个网络能够自主学习识别猫等物体&#xff0c;并在短短三天时间内绘制出了一张模糊但…

微信小程序 ---- 慕尚花坊 收货地址

收货地址 收货地址列表新增收货地址编辑收货地址删除收货地址 01. 定义新增参数以及封装接口 API 思路分析&#xff1a; 点击新建地址按钮&#xff0c;需要跳转到新增地址页面 因为新增和编辑收货地址页面是同一个页面&#xff0c;我们需要在这个页面处理新增和编辑功能&a…

应用存储与持久化数据卷

1、PV 引入场景&#xff1a; ① Deployment 管理的 pod&#xff0c;在做镜像升级的过程中&#xff0c;会产生新的 pod并且删除旧的 pod &#xff0c;新旧 pod 之间如何复用数据&#xff1f; ② 宿主机宕机的时候&#xff0c;如何实现带卷迁移&#xff1f; ③ 多个 pod 之间&…

亚信安慧AntDB-M的扩展功能(三)

销毁函数&#xff1a; void My_SUM_deinit(UDF_INIT *initid) { //清理工作 } 假设编译生成的动态库名字是&#xff1a;my_sum_udf.so。 使用CREATE FUNCTION命令创建函数&#xff1a; CREATE FUNCTION My_SUM RETURNS INTEGER SONAME my_sum_udf.so; 使用UDF: SELECT My…

模型优化_如何提高网络/模型的泛化能力?(全面)

目录 1. 以数据为中心的泛化方法 1.1 使用更多数据 1.2 做好数据预处理 特征工程 1.3 数据增强 1.4 调整数据分布 2. 以模型为中心的泛化方法 2.1 使用更大批次 超参数调优 2.2 调整目标函数 2.3 调整网络结构 2.4 屏蔽网络节点 2.5 权值正则化 2.6 偏差-方差权衡…

雾锁王国服务器官方配置要求说明

雾锁王国/Enshrouded服务器CPU内存配置如何选择&#xff1f;阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置&#xff0c;支持4人玩家畅玩&#xff0c;自带10M公网带宽&#xff0c;1个月90元&#xff0c;3个月271元&#xff0c;幻兽帕鲁服务器申请页面 https://t.aliyun.com…

【BUUCTF web】通关1.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

微信为什么使用 SQLite 保存聊天记录?

SQLite 是一个被大家低估的数据库&#xff0c;但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上&#xff0c;SQLite 是一个非常可靠的数据库&#xff0c;它可以处理 TB 级的数据&#xff0c;但它没有网络层。接下来&#xff0c;本文将与大家共同探讨 SQLite 在过去…

房贷计算器微信小程序原生语言

微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…

ZABBIX修改web界面的 “支持“,“帮助”,“Integrations“。等菜单按钮,百试百灵,删除修改Help,Support菜单

♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ **ZABBIX修改web界面的 “支持”&#xff0c;“帮助”,“Integrations”。等菜单按钮&#xff0c…

十三、Qt多线程与线程安全

一、多线程程序 QThread类提供了管理线程的方法&#xff1a;一个对象管理一个线程一般从QThread继承一个自定义类&#xff0c;重载run函数 1、实现程序 &#xff08;1&#xff09;创建项目&#xff0c;基于QDialog &#xff08;2&#xff09;添加类&#xff0c;修改基于QThr…

提升智能客服机器人的语义理解能力:理解用户的语义和意图

智能客服机器人的发展已经成为现代服务业的一大亮点。它们不仅能够提供724小时不间断的服务&#xff0c;而且能够处理大量的用户请求&#xff0c;大大提高了服务效率。然而&#xff0c;尽管智能客服机器人的技术已经取得了显著的进步&#xff0c;但其语义理解能力仍有待提高。为…

Crawler爬虫基础知识

本来其实不知道爬虫的意义的&#xff0c;但是发现爬虫在信息收集的那一方面好像挺重要&#xff01;&#xff01; 那么就来浅学一下吧&#xff01;&#xff01;&#xff01; 1.基本的储备 对于爬虫&#xff0c;我们一般都是用的python去编写脚本 &#xff0c;其中还要导入…

阿里云启动实例进入了急救模式解决办法

相关文档 问题描述 通过远程连接软件无法登录Linux实例&#xff0c;通过使用管理终端连接Linux实例远程连接时&#xff0c;发现系统进入到急救模式&#xff08;emergency mode&#xff09;&#xff0c;且出现报错。 CentOS实例报如下错误。 systemctl default to try again…

模拟算法题练习(一)

模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实现起来比较复杂&#xff0c;有很多需要注意的细节&#xff0c;或者是一些所谓很“麻模“的东西。 模拟题一般不涉及太难的算法&#xff0c;一般就是由较多的简单但是不好处理的部…

Java——建造者模式(Builder)

建造者模式&#xff08;Builder&#xff09; 1、建造者模式的定义 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂对象的创建型模式&#xff0c;它允许使用者在不知道内部建造细节的情况下&…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

【计算机】本科考研还是就业?

其实现在很多计算机专业的学生考研&#xff0c;也是无奈的选择 技术发展日新月异&#xff0c;而在本科阶段&#xff0c;大家学着落后的技术&#xff0c;出来找工作自然会碰壁。而且现在用人单位的门槛越来越高&#xff0c;学历默认研究生起步&#xff0c;面试一般都是三轮起步…

Linux 下安装Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 启动&#xff1a; python3 -m jupyter lab 2.安装朱皮特 pip3 install -i https://pypi.douban.com/simpl…

安卓开发1- android stdio环境搭建

安卓开发1-android stdio环境搭建 Jdk环境搭建 1. 准备Jdk,这边已经准备好了jdk1.8.0,该文件直接使用即可 2. 系统变量添加 %JAVA_HOME%\bin JAVA_HOME 3. 系统变量&#xff0c;Path路径添加 4. 添加完成后&#xff0c;输入命令javac / java -version&#xff0c;验证环…
推荐文章