- ModuleNotFoundError: No module named ‘flask._compat‘
我不是大佬zvj
flaskpython后端
大家最好别用Flask-Script这个模块了,因为flask2.0及其以上版本取消了flask._compat模块,这个bug根本解决不了,就算降低了flask的版本也会出来其他各种类似的问题,都是由于包版本冲突导致的。搞得我写的项目直接烂尾了,本地之前开发的时候使用的是大环境,没有重构一个新的虚拟环境,所以建议大家开发新项目一定要使用一个新的环境,严格控制包的版本。
- Flask框架——蓝图、flask-script
白巧克力LIN
在上篇文章我们学习了Flask框架——模板复用(继承、包含、宏),这篇文章我们来学习Flask框架——蓝图、命令行工具flask-script。蓝图在一个完整的Flask应用程序中,肯定会有很多视图函数,例如:用Flask框架写的购物网站中,会有和用户、商品、评论相关联的视图函数,把所有视图函数都放在一个py文件中肯定是不可取的,管理起来会非常不方便。这时我们可以把视图函数进行模块化处理,把用户视
- 01-PyCharm运行flask程序
0x70e8
本内容参考:https://my.oschina.net/ykbj/blog/618475安装依赖库安装flask-script,利用flask-script来启动。修改flaskweb程序源码fromflask_scriptimportManager,Serverapp=Flask(__name__)#使用flask-script来运行manager=Manager(app)#开启debugma
- 02-flask 基本使用
学飞的小鸡
安装flaskpipinstallflask创建项目添加路由规则和视图函数#字符串@app.route('/hello/')defhome():return'helloworld'#模板@app.route('/home/')defhome():returnrender_template('home.html')启动项目pythonapp.py五flask-script插件作用用于命令行接收参数官
- flask入门到起飞(九)数据库迁移和Flask-Migrate库使用
aimaile
在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。为了导出数据库迁移命令,Flask-Migrate提供了一个Migr
- Flask 创建命令数据库迁移flask-migrate
於 兔シ
flaskpythonflask
数据库迁移在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。为了导出数据库迁移命令,Flask-Migrate提供了一
- Flask 自定义命令 类似于django的manage.py
於 兔シ
flaskpython
Flask-Script扩展文档:https://flask-script.readthedocs.io/en/latest/这个模块的作用可以让我们通过终端来控制flask项目的运行,类似于django的manage.py安装命令:pipinstallflask-script集成Flask-Script到flask应用中,创建一个主应用程序,一般我们叫manager.py/run.py/main
- 6-flask-请求扩展、蓝图、数据库连接池(flask使用pymysql)、wtforms、flask-script(具体使用、自定制命令)、信号(内置、自定义、用途)、flask-cache
林圜围
flaskflaskwtformsflask-scriptsignalpymysqlblurprintdjango
1请求扩展2蓝图3flask-session4数据库连接池4.1flask使用pymysql5wtforms6flask-script—》新版本不用了6.1flask-script的具体使用6.2新版本启用了(基于click)6.3django中自定制命令7信号7.1内置信号使用7.2自定义信号7.3信号的实际用途7.4django中如何使用信号8flask-cache1请求扩展#1before_
- Flask-script下的问题
LM_朗明
今天遇到一个小问题就是jinja2.exceptions.TemplateNotFound找不到路径的问题首先我放在了static的文件夹下原放在的路径运行what1.py时发现出现了这个解决办法:把需要的文件放下templates下image.png接着你的代码路径旁会出现一个图标,代表你路径对了image.png运行what1.py就解决了在窗口中运行代码pythonwhat1.pyrunse
- Flask-Migrate 数据库模型迁移
Kris_Shin
由于flask更新之后flask-migrate新版和flask-script无法兼容,解决了新版的迁移问题使用flask-migrate3.1.0迁移数据库从flask-migrate3.0以下一般和flask-script搭配使用但是在3.0之后flask-migrate去掉了MigrateCommand这个模块,会导致报错ImportError:cannotimportname'Migrat
- 06. flask上下文源码、flask_session、数据库连接池、flask_script
知行合一cc
flaskpythonflask
文章目录一、flask上下文源码分析二、flask-session的使用第一种使用方式(不常用)第二种使用方式(通过配置,本质和方式一是一样的)三、数据库连接池1传统方案存在的问题2使用数据库连接池3使用步骤第一步:新建sql_pool.py第二步:使用(导入连接池是单例模式)四、flask-script模块作用:安装:使用:自定制命令(简单示例)一、flask上下文源码分析请求上下文执行流程(c
- 3.8 Flask-Script
yungege
Flask-Script:Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pipinstallflask-script安装最新版本。首先看一个最简单的例子:#manage.pyfromflask_scriptimportManagerfromyour_appimportappm
- 2022-03-21
pr_小彭友
基础教程:https://www.w3cschool.cn/flask/官网教程:https://flask.net.cn/tutorial/index.html学习博客:https://blog.csdn.net/weixin_45950544/article/details/104067405常用扩展包Flask-SQLalchemy:操作数据库;Flask-script:插入脚本;Flask
- Flask-script使用及错误No module named flask._compat
全栈运维
flask-icon.png先说问题在使用过程到遇到问题,提示没有flask._compat模块(flask-projs)[root@test-xxxx-01-vm]#pythonapp.pyTraceback(mostrecentcalllast):File"/data/colinspace/temp/flask-demo/demoproj/app.py",line5,infromflask_s
- flask-migrate使用
淘淘桃
flaskflaskpython后端
1.介绍#表,字段发生变化,都会有记录,自动同步到数据库中--》django支持这种操作#原生的sqlalchemy,不支持修改表的#flask-migrate可以实现类似于django的pythonmanage.pymakemigrations#记录pythonmanage.pymigrate#真正的同步到数据库2.准备工作-安装flask,flask-script,flask-migrate,
- flask-migrate扩展
肆意放纵¥
技术博客pythonflask
1.因为采用db.create_all()在后期修改表字段时,不会自动映射到数据库中,必须删除表,然后重新运行才会映射,这样不符合实际的需求,因此flask-Migrate就是为了解决这个问题,它可以在每次修改模型后,可以将修改的东西映射到数据库中。2.首先进入到flask的虚拟环境或者物理环境中然后使用pipinstallflask-migrate进行安装;安装flask-script支持命令行
- flask SQLAlchemy连接数据库 ORM SQLAlchemy对数据的增删改查以及常用数据类型 Flask-Migrate Flask-Script Flask-SQLAlchemy
嘎嘎_哈
Flaskflasksqlalchemy连接数据库flask-migrateflask-script
1,SQLAlchemy连接数据库在Flask中,如果想要操作数据库,我们可以使用ORM来操作数据库,使用ORM操作数据库将变得非常简单。以mysql+SQLAlchemy组合进行学习SQLAlchemy:SQLAlchemy是一个数据库的ORM框架安装命令为:pip3installSQLAlchemy。通过SQLAlchemy连接数据库首先来看一段代码:fromsqlalchemyimportc
- flask----内置信号的使用/django的信号/ flask-script/sqlalchemy介绍和快速使用/sqlalchemy介绍和快速使用
骑台风走
flask(更订中)flaskdjangopython
信号内置信号的使用#第一步:写一个函数deftest(app,**kwargs):print(app)print(type(kwargs))#请求地址是根路径,才记录日志,其它都不记录print(kwargs['context']['request'].path)ifkwargs['context']['request'].path=='/':print('记录日志了')#第二步:跟内置信号绑定#
- flask-script
淘淘桃
flaskflaskpython后端
#django中,有命令pythonmanage.pyrunserverpythonmanage.pymakemigrations...自定制命令(django如何自定制命令)...-pythonmanage.pyinit_dbexcel文件路径指定表名#flask启动项目,像djagno一样,通过命令启动指定版本pipinstallFlask==2.2.2pipinstallFlask_Scri
- 新版本的Flask中如何启动开发服务器和开启调试模式
忘了呼吸的那只猫
从Flask0.11版本开始,官方就建议使用flaskrun命令来取代app.run()方法运行开发服务器。尽管如此,两年多过去了,仍然有大量新发布的文章和教程在示例中使用app.run()方法启动程序。类似的,虽然内置的命令行支持已经非常完善,但还有很多人在使用Flask-Script。不得不承认,在某些特殊场景下,app.run()更加方便,比如创建Flask命令在附加Werkzeug提供的性
- Flask-Script Manager
氨基钠
FlaskScript扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Pythonshell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;FlaskScript和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;官方文档:http://flask-script.readthedoc
- flask migrate 使用
SkTj
安装Flask-Migrate插件1(venv)$pipinstallflask-migrate注意到虚拟环境中(因为Flask环境就安装在虚拟环境中)安装flask-script使python支持命令行操作1pipinstallflask-script创建manage.py文件12345678910111213141516171819202122!/usr/bin/envpythonfromfl
- Flask系列教程(26)——Flask-Script
编程小蝉
Flask-Script:如果想深入学习Flask,可以观看这套免费Flask教学视频:零基础:Flask入门到项目实战Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。要使用Flask-Script,可以通过pipinstallflask-script安装最新版本。首先看一个最简单的例子:#manage.pyfrom
- flask-migrate新版本使用
Deng872347348
flaskpython后端
flask-migrate新版本使用如果PythonFlask使用数据迁移报错:ImportError:cannotimportname‘MigrateCommand’from‘flask_migrate’说明你的版本是新的版本,可以参考flask-migrate新版本的问题。flask-migrate3.0.1使用由于Flask-Script长久不维护,且没有适配flask2.0以上的版本,所以
- Flask Error:ModuleNotFoundError: No module named ‘flask._compat‘
苏寅
FlaskErrorFlaskFlask-ScriptError
版本信息Flask==2.0.2Flask-Script==2.0.6场景描述在使用Flask的Flask-Script拓展时运行python.\app.pyrunserver-d-r命令报错:Traceback(mostrecentcalllast):File"C:\Users\server\Desktop\gongkaoleida\api\app.py",line2,infromflask_s
- flask项目简单搭建
Sepember
研发管理flaskpython
1、项目环境的搭建flask-script使用flask-script模块里面的Manager创建对象,就是可以在pythonxxxxx.py这个语句后面可以加入添加语句进行运行flask-session和redis添加这个扩展模块后,可以对flask里面配合redis对session进行操作,存储或清除字段flask-blueprint可以让Flask对象注册多个蓝图对象,相当于插入了bluep
- 初识flask——项目拆分、运行、插件以及会话技术
人心难测唯真心不负
一、flask基本使用安装flaskpipinstallflask创建项目添加路由规则和视图函数@app.route('/hello/')defhello():return'helloflask'启动项目pythonapp.py二、flask-script插件作用用于接收命令行参数!!!官方文档https://flask-script.readthedocs.io/en/latest/安装插件pi
- Flask实现个人博客(二)--数据模型
凉凉_2e4d
中文教程我在此用的是mysql数据库为了数据库更好的维护和迁移要引入4个包flask-script、flask-migrate、pymysql、flask_sqlalchemy在自己的虚拟环境下pipinstallflask-script、pipinstallflask-migrate、pipinstallmysql由于是个人博客就就先不设计外键关系了,后期扩展有可能加在mysql下创建一个名叫m
- flask知识点
繁花似锦之流年似水
初始化启动服务器路由app.route视图函数重定向redirect请求上下文request和session程序上下文g和current_app响应make_response用于构建指定函数的urlurl_forurl映射:app.route修饰器和app.add_url_rule()flask-script扩展的命令行解析器模板渲染render_template
- Flask 构建微电影视频网站(1)
听你讲故事啊
Flask构建电影视频网站PythonMTV模型Flask微内核Flask扩展插件配置及使用方法根据业务开发网站前后台功能Flask结合MySQL数据库你将可以独立开发网站独立部署运维网站werkzug工具箱pymysql数据库驱动sqlalchemy数据库ormwtforms表单验证工具jinjia2模板引擎flask-script命令行脚本functools定义高阶函数jwplayer播放器插
- VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite
iwindyforest
vmwaremac os10.10workstationplayer
最近尝试了下VMware下安装MacOS 系统,
安装过程中发现网上可供参考的文章都是VMware Workstation 10以下, MacOS X 10.9以下的文章,
只能提供大概的思路, 但是实际安装起来由于版本问题, 走了不少弯路, 所以我尝试写以下总结, 希望能给有兴趣安装OSX的人提供一点帮助。
写在前面的话:
其实安装好后发现, 由于我的th
- 关于《基于模型驱动的B/S在线开发平台》源代码开源的疑虑?
deathwknight
JavaScriptjava框架
本人从学习Java开发到现在已有10年整,从一个要自学 java买成javascript的小菜鸟,成长为只会java和javascript语言的老菜鸟(个人邮箱:
[email protected])
一路走来,跌跌撞撞。用自己的三年多业余时间,瞎搞一个小东西(基于模型驱动的B/S在线开发平台,非MVC框架、非代码生成)。希望与大家一起分享,同时有许些疑虑,希望有人可以交流下
平台
- 如何把maven项目转成web项目
Kai_Ge
mavenMyEclipse
创建Web工程,使用eclipse ee创建maven web工程 1.右键项目,选择Project Facets,点击Convert to faceted from 2.更改Dynamic Web Module的Version为2.5.(3.0为Java7的,Tomcat6不支持). 如果提示错误,可能需要在Java Compiler设置Compiler compl
- 主管???
Array_06
工作
转载:http://www.blogjava.net/fastzch/archive/2010/11/25/339054.html
很久以前跟同事参加的培训,同事整理得很详细,必须得转!
前段时间,公司有组织中高阶主管及其培养干部进行了为期三天的管理训练培训。三天的课程下来,虽然内容较多,因对老师三天来的课程内容深有感触,故借着整理学习心得的机会,将三天来的培训课程做了一个
- python内置函数大全
2002wmj
python
最近一直在看python的document,打算在基础方面重点看一下python的keyword、Build-in Function、Build-in Constants、Build-in Types、Build-in Exception这四个方面,其实在看的时候发现整个《The Python Standard Library》章节都是很不错的,其中描述了很多不错的主题。先把Build-in Fu
- JSP页面通过JQUERY合并行
357029540
JavaScriptjquery
在写程序的过程中我们难免会遇到在页面上合并单元行的情况,如图所示
如果对于会的同学可能很简单,但是对没有思路的同学来说还是比较麻烦的,提供一下用JQUERY实现的参考代码
function mergeCell(){
var trs = $("#table tr");
&nb
- Java基础
冰天百华
java基础
学习函数式编程
package base;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
// Integer a = 4;
// Double aa = (double)a / 100000;
// Decimal
- unix时间戳相互转换
adminjun
转换unix时间戳
如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 62135
- 作为一个合格程序员该做的事
aijuans
程序员
作为一个合格程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多
2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重
- 由html5视频播放引发的总结
ayaoxinchao
html5视频video
前言
项目中存在视频播放的功能,前期设计是以flash播放器播放视频的。但是现在由于需要兼容苹果的设备,必须采用html5的方式来播放视频。我就出于兴趣对html5播放视频做了简单的了解,不了解不知道,水真是很深。本文所记录的知识一些浅尝辄止的知识,说起来很惭愧。
视频结构
本该直接介绍html5的<video>的,但鉴于本人对视频
- 解决httpclient访问自签名https报javax.net.ssl.SSLHandshakeException: sun.security.validat
bewithme
httpclient
如果你构建了一个https协议的站点,而此站点的安全证书并不是合法的第三方证书颁发机构所签发,那么你用httpclient去访问此站点会报如下错误
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path bu
- Jedis连接池的入门级使用
bijian1013
redisredis数据库jedis
Jedis连接池操作步骤如下:
a.获取Jedis实例需要从JedisPool中获取;
b.用完Jedis实例需要返还给JedisPool;
c.如果Jedis在使用过程中出错,则也需要还给JedisPool;
packag
- 变与不变
bingyingao
不变变亲情永恒
变与不变
周末骑车转到了五年前租住的小区,曾经最爱吃的西北面馆、江西水饺、手工拉面早已不在,
各种店铺都换了好几茬,这些是变的。
三年前还很流行的一款手机在今天看起来已经落后的不像样子。
三年前还运行的好好的一家公司,今天也已经不复存在。
一座座高楼拔地而起,
- 【Scala十】Scala核心四:集合框架之List
bit1129
scala
Spark的RDD作为一个分布式不可变的数据集合,它提供的转换操作,很多是借鉴于Scala的集合框架提供的一些函数,因此,有必要对Scala的集合进行详细的了解
1. 泛型集合都是协变的,对于List而言,如果B是A的子类,那么List[B]也是List[A]的子类,即可以把List[B]的实例赋值给List[A]变量
2. 给变量赋值(注意val关键字,a,b
- Nested Functions in C
bookjovi
cclosure
Nested Functions 又称closure,属于functional language中的概念,一直以为C中是不支持closure的,现在看来我错了,不过C标准中是不支持的,而GCC支持。
既然GCC支持了closure,那么 lexical scoping自然也支持了,同时在C中label也是可以在nested functions中自由跳转的
- Java-Collections Framework学习与总结-WeakHashMap
BrokenDreams
Collections
总结这个类之前,首先看一下Java引用的相关知识。Java的引用分为四种:强引用、软引用、弱引用和虚引用。
强引用:就是常见的代码中的引用,如Object o = new Object();存在强引用的对象不会被垃圾收集
- 读《研磨设计模式》-代码笔记-解释器模式-Interpret
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 解释器(Interpreter)模式的意图是可以按照自己定义的组合规则集合来组合可执行对象
*
* 代码示例实现XML里面1.读取单个元素的值 2.读取单个属性的值
* 多
- After Effects操作&快捷键
cherishLC
After Effects
1、快捷键官方文档
中文版:https://helpx.adobe.com/cn/after-effects/using/keyboard-shortcuts-reference.html
英文版:https://helpx.adobe.com/after-effects/using/keyboard-shortcuts-reference.html
2、常用快捷键
- Maven 常用命令
crabdave
maven
Maven 常用命令
mvn archetype:generate
mvn install
mvn clean
mvn clean complie
mvn clean test
mvn clean install
mvn clean package
mvn test
mvn package
mvn site
mvn dependency:res
- shell bad substitution
daizj
shell脚本
#!/bin/sh
/data/script/common/run_cmd.exp 192.168.13.168 "impala-shell -islave4 -q 'insert OVERWRITE table imeis.${tableName} select ${selectFields}, ds, fnv_hash(concat(cast(ds as string), im
- Java SE 第二讲(原生数据类型 Primitive Data Type)
dcj3sjt126com
java
Java SE 第二讲:
1. Windows: notepad, editplus, ultraedit, gvim
Linux: vi, vim, gedit
2. Java 中的数据类型分为两大类:
1)原生数据类型 (Primitive Data Type)
2)引用类型(对象类型) (R
- CGridView中实现批量删除
dcj3sjt126com
PHPyii
1,CGridView中的columns添加
array(
'selectableRows' => 2,
'footer' => '<button type="button" onclick="GetCheckbox();" style=&
- Java中泛型的各种使用
dyy_gusi
java泛型
Java中的泛型的使用:1.普通的泛型使用
在使用类的时候后面的<>中的类型就是我们确定的类型。
public class MyClass1<T> {//此处定义的泛型是T
private T var;
public T getVar() {
return var;
}
public void setVa
- Web开发技术十年发展历程
gcq511120594
Web浏览器数据挖掘
回顾web开发技术这十年发展历程:
Ajax
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a
- openSession()与getCurrentSession()区别:
hetongfei
javaDAOHibernate
来自 http://blog.csdn.net/dy511/article/details/6166134
1.getCurrentSession创建的session会和绑定到当前线程,而openSession不会。
2. getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。
这里getCurrentSession本地事务(本地
- 第一章 安装Nginx+Lua开发环境
jinnianshilongnian
nginxluaopenresty
首先我们选择使用OpenResty,其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒
- HSQLDB In-Process方式访问内存数据库
liyonghui160com
HSQLDB一大特色就是能够在内存中建立数据库,当然它也能将这些内存数据库保存到文件中以便实现真正的持久化。
先睹为快!
下面是一个In-Process方式访问内存数据库的代码示例:
下面代码需要引入hsqldb.jar包 (hsqldb-2.2.8)
import java.s
- Java线程的5个使用技巧
pda158
java数据结构
Java线程有哪些不太为人所知的技巧与用法? 萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常
工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法。比如说线程。没错,就是线程。或者确切说是Thread这个类。当我们在构建高可扩展性系统的时候,通常会面临各种各样的并发编程的问题,不过我们现在所要讲的可能会略有不同。
- 开发资源大整合:编程语言篇——JavaScript(1)
shoothao
JavaScript
概述:本系列的资源整合来自于github中各个领域的大牛,来收藏你感兴趣的东西吧。
程序包管理器
管理javascript库并提供对这些库的快速使用与打包的服务。
Bower - 用于web的程序包管理。
component - 用于客户端的程序包管理,构建更好的web应用程序。
spm - 全新的静态的文件包管
- 避免使用终结函数
vahoa.ma
javajvmC++
终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。
我自己总结了一下这一条的综合性结论是这样的:
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方