一.安装flask

#安装flask

pip install flask -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

二.hello world

from flask import Flask

app=Flask(__name__)#实例化给了一个对象
#print(__name__)

@app.route('/')
def index():
    return 'hello world' #返回给到了路由app.route
app.run()

1.在Flask应用程序中,如果我们没有使用@app.route()装饰器将视图函数与特定的URL路径对应起来,那么服务器就无法找到处理该URL路径的视图函数,从而返回404错误给用户。
@app.route('/')装饰器的作用是将视图函数与网站的根路径关联起来,这样Flask就能够识别用户请求的是根路径,并自动调用对应的视图函数来处理请求,从而向用户提供所需的网页或资源。

2.http://127.0.0.1:5000/ 去匹配@app.route('/')匹配成功,然后返回给页面当中页面当中渲染就可以在页面当中打印出来
3.return '<h1>hello world<h1/>'#标签

三.路由

1.在Flask应用程序中,路由(Route)的作用是将Web请求的URL路径与相应的视图函数进行映射,以便Flask框架能够自动调用相应的视图函数来处理请求并返回响应。
换句话说,路由充当了Flask应用程序中URL路径和视图函数之间的桥梁,使得我们可以通过访问特定的URL路径来调用相应的视图函数,并让Flask框架将其返回的响应内容封装成HTTP响应返回给客户端。

在Flask中,使用装饰器来定义路由

2.if __name__ == '__main__':

3.其他要关掉,不能开两个同样的端口

4.
from flask import Flask
app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'hello world'

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

http://127.0.0.1:5000/
没有找到
因为需要匹配根目录下
要改为http://127.0.0.1:5000/hello

5.两个路由
from flask import Flask
app = Flask(__name__)

@app.route('/hello')
def hello():
    return 'hello world'
@app.route('/hi')
def hi():
    return 'hi hi'

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

6.if __name__ == '__main__':是Python中常见的条件语句,它的作用是判断当前脚本是否在直接运行(而不是被其他脚本引用)。在这个Flask应用程序中,这个条件语句的作用是告诉Python解释器:当我们直接运行这个脚本时,应该执行什么操作。

在这个例子中,我们通过if __name__ == '__main__':语句来判断当前脚本是否在直接运行。如果是,则执行app.run()语句来启动Flask应用程序。如果不是,则不执行app.run()语句。

这种写法的好处在于,我们可以将这个脚本作为模块引用到其他脚本中,而不会执行app.run()语句。同时,如果我们直接运行这个脚本,app.run()语句将会被执行,从而启动Flask应用程序。因此,这种写法可以让我们的代码更加灵活和可复用。

7.
@app.route('/hello',methods=['GET','POST'])
def hello():
    return 'hello world'

控制路由接受怎么样的请求,一个'GET'请求,一个''POST’请求
输入URL访问的是GET请求,使用到表单的时候POST请求
8.

@app.route('/hi',methods=['POST'])
def hi():
    return 'hi hi'
只接收POST请求
访问:http://127.0.0.1:5000/hi
Method Not Allowed
The method is not allowed for the requested URL.
所请求的URL不允许使用该方法
这个错误提示是因为在访问"http://127.0.0.1:5000/hi"时使用了GET方法,而在你的代码中,该路由只接受POST方法。
在浏览器中直接访问一个 URL,那么浏览器会默认使用 GET 方法来发送请求
9.注意如果根目录同名只会匹配第一个
10.
@app.route('/hi',methods=['POST'],endpoint='hi')
def hi():
    return 'hi hi'

路由变量规则

路由的变量规则
(如何匹配/1 /2 /3)
1.
@app.route('/user/<id>')
def index():
    return 'hello world'
<>相当于使用到正则匹配的方式,匹配到一个id

id如果要使用会把id传给这个函数,所以函数需要接收变量
就写为def index(id)
判断id是不是等于1,等于则返回一个python;等于2返回一个django;等于3返回flask
@app.route('/user/<id>')
def index(id):
    if id == 1:
        return 'python'
    if id == 2:
        return 'django'
    if id == 3:
        return 'flask'

return 'hello world'
2.
访问http://127.0.0.1:5000/user/1或2或3,结果都是hello world,因为都没有满足
说明前端URL传到后端其实都是字符串,但id这是数字所以不行,若要使用则数字加上引号或str或int转化
则改为:
@app.route('/user/<id>')
def index(id):
    if id == '1':
        return 'python'
    if id == str(2):
        return 'django'
    if int(id) == 3:
        return 'flask'

return 'hello world'
此时显示无误

3.
如果想要前端传过去就是数字也有方法
(变量规则当中的转换器)
原:
@app.route('/user/<id>')
可改为:
@app.route('/user/<int:id>')
意思是前端传过来的id就是int类型
可接收正整数
4.
如果:
@app.route('/user/<string:id>')
可接收任何不包含/的文本

@app.route('/user/<float:id>')
可接收正浮点数

@app.route('/user/<path:id>')
可接收包含/的文本

四.flask自定义转换器

1.
<>是用来提取参数的
<int:id>int转换器

from werkzeug.routing import BaseConverter
作用是导入 Werkzeug 路由系统中的基础转换器类 BaseConverter。
在 Flask Web 应用中,URL 路由通常由 Werkzeug 路由系统处理。Werkzeug 的路由系统将 URL 映射到相应的视图或处理请求的函数。Flask 提供了多种内置的 URL 转换器,用于处理常见的数据类型,例如字符串、整数和 UUID,但是你也可以通过继承 BaseConverter 类创建自己的自定义转换器。
创建自定义转换器时,需要定义一个继承 BaseConverter 的类,并实现 to_python() 和 to_url() 方法。to_python() 方法用于将 URL 值转换为 Python 对象,to_url() 方法用于将 Python 对象转换为 URL 值。

class BaseConverter:
    """Base class for all converters."""
这段代码定义了一个名为BaseConverter的Python类,这是一个基类,其它转换器类可以从这个类继承并重写其中的方法。这个类可能包含一些通用的方法和属性,可以在其它转换器中重复使用。在这里的注释中,这个类被描述为“所有转换器的基类”,意思是这个类是为了将来可能创建的各种转换器类而设计的通用基础类。

app = Flask(__name__)
将Flask(__name__)赋值给app变量,是为了创建一个Flask应用程序对象,并将这个对象存储在变量app中,方便在接下来的代码中使用。代码中,Flask类的构造函数使用了一个参数__name__,这个参数指定了应用程序的名称,一般来说这个参数会被设置为Python模块的名称,通常使用__name__变量传递。

class RegexConverter(BaseConverter):
这段代码定义了一个名为RegexConverter的Python类,它是从BaseConverter类继承而来的。这个类扩展了BaseConverter类,并添加了自定义的正则表达式匹配功能,用于将URL路径中的参数值按照指定的正则表达式进行匹配和转换。通过继承BaseConverter类,这个类可以使用BaseConverter类中定义的一些方法和属性,从而避免重复编写一些通用的代码。

2.
1).因为class BaseConverter:用的是
    def __init__(self, map: "Map", *args: t.Any, **kwargs: t.Any) -> None:
        self.map = map
2).因为在路由转换器中,我们需要使用正则表达式来匹配URL路径中的参数,从而将参数值转换成Python对象。因此,regex参数的作用就是提供一个正则表达式,用于匹配和转换URL路径中的参数。
'regex'全称为Regular Expression(正则表达式)
所以写为
class RegexConverter(BaseConverter):
    def __init__(self,url_map,regex):

3.
#调用父类的方法,因为重写就没有了但需要使用到父类方法的一些功能。
        super(RegexConverter,self).__init__(url_map)
1).super() 是Python中的一个内置函数,用于调用父类的方法或属性,super()类中的__init__方法是一个初始化函数,它用于初始化父类的对象属性。
2).在使用super()函数时,我们需要指定两个参数,即派生类和对象引用。其中,派生类指的是当前类,也就是继承了父类的那个类;而对象引用则指的是当前类的实例对象,即创建的一个具体的对象。这样,在使用super()函数时,就可以将当前类的对象引用传递给父类的方法,以便让父类对当前类的对象进行操作。
3).RegexConverter 表示当前类(type)的名称,即派生类,BaseConverter 是 RegexConverter 的父类。
4).self 表示当前对象的引用,self是 RegexConverter 类的实例对象。
5).__init__(url_map) 表示要调用的父类构造函数,其中 url_map 是父类构造函数的一个参数。意思是将url_map传进去

4.
再self.regex = regex
在Python中,一个对象在被创建的时候,需要先初始化它的状态,也就是给它的属性赋值。在这个类的构造函数中,需要初始化 self.regex 属性,而且还需要调用父类的构造函数来完成其他必要的初始化操作。因此,在这个类的构造函数中,需要按照一定的顺序来完成这两个操作,不能随便颠倒顺序。
具体来说,首先要调用父类的构造函数 super(RegexConverter, self).__init__(url_map),因为父类的构造函数可能会做一些必要的准备工作,例如初始化一些共享的资源。只有父类的构造函数完成之后,才能保证子类的构造函数可以顺利地执行。因此,我们不能把 self.regex = regex 放在父类构造函数之前。
如果我们把 self.regex = regex 放在父类构造函数之前,那么如果在这行代码之前出现异常,那么父类的构造函数就没有被调用,这样就会导致子类对象的状态不完整。这种情况是应该避免的,因为它可能会导致对象的行为异常,甚至崩溃。所以,我们要按照规定的顺序来执行构造函数中的操作,保证对象状态的完整性。

5.
__init__方法里还有
    def to_python(self, value: str) -> t.Any:
        return value
父类写好了
重新规定
    def to_python(self, value):
        return value    
如何知道方法已调用?-->print('to_python方法被调用')

6.将自定义的转换器类添加到flask应用中
app.url_map.converters['re'] = RegexConverter
1).代码的意思是将自定义的 RegexConverter 转换器注册到 Flask 应用程序的 URL 转换器注册表中,并分配一个名称 're',以便在路由定义中使用
2).以字典的方式添加
3).把类RegexConverter添加到里面去,re类似字典的形式,re就等于这样一个类,后面使用用re就可以了

7.
app.url_map.converters['re'] = RegexConverter
app.route('/index/<re>')
def index(value):
    return 'hello'
使用re就相当于使用这个类
规则匹配123
外面用单引号,里面用双引号

8.
app.url_map.converters['re'] = RegexConverter
@app.route('/index/<re("123"):value>')
def index(value):
    return 'hello'
这段代码定义了一个基于 Flask 框架的简单 Web 应用程序,并使用了自定义的转换器 RegexConverter。这个转换器允许在路由中使用正则表达式作为参数。
接下来的代码中,app.route() 装饰器定义了一个处理 URL 为 /index/123 的请求的视图函数,其中 <re("123"):value> 指定了 URL 中的参数 value 必须符合正则表达式 123,也就是说,只有当访问 /index/123 时,才会触发这个视图函数。
这个视图函数返回了一个字符串 'hello',意思是当访问 /index/123 时,网页会显示 'hello'。
9.
如果要匹配掉号码
将@app.route('/index/<re("123"):value>')改为
@app.route('/index/<re("1\d{10}"):value>')
首字母开头有10位
这种情况下
http://127.0.0.1:5000/index/12341111111
网页显示hello

全代码:

#自定义转化器
from werkzeug.routing import BaseConverter
from flask import Flask

app = Flask(__name__)

class RegexConverter(BaseConverter):
    """自定义转换器类"""
    def __init__(self,url_map,regex):
        #调用父类的方法,因为重写就没有了但需要使用到父类方法的一些功能。
        super(RegexConverter,self).__init__(url_map)
        self.regex = regex

def to_python(self, value):
        #父类功能方法已实现
        print('to_python方法被调用')
        return value

#将自定义的转换器类添加到flask应用中
app.url_map.converters['re'] = RegexConverter

#@app.route('/index/<re("123"):value>')
@app.route('/index/<re("1\d{10}"):value>')
def index(value):
    return 'hello'

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

完整代码:

#自定义转化器
from werkzeug.routing import BaseConverter
from flask import Flaskapp = Flask(__name__)class RegexConverter(BaseConverter):"""自定义转换器类"""def __init__(self,url_map,regex):#调用父类的方法,因为重写就没有了但需要使用到父类方法的一些功能。super(RegexConverter,self).__init__(url_map)self.regex = regexdef to_python(self, value):#父类功能方法已实现print('to_python方法被调用')return value#将自定义的转换器类添加到flask应用中
app.url_map.converters['re'] = RegexConverter#@app.route('/index/<re("123"):value>')
@app.route('/index/<re("1\d{10}"):value>')
def index(value):return 'hello'if __name__ == '__main__':app.run()

五.渲染form表单

form表单属于前端当中一个知识点
前端的表单如何与后端的程序产生交互?
1.创建一个python软件包名为templates,意为模板。
2.将html文件放到里面(名为index)
3.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">
</form>
</body>
</html>

4.在这里写上在前端输入的东西怎么提交到后端去
type="text"指的是文本的一个类型
submit提交
<body>
<form action="">
    <input type="text" name="name">
    <input type="password" name="password">
    <input type="submit" name="submit">
</form>

</body>
5.展示一下
Copy Path复制路径
网页展示效果

6.
汉字备注及<br>标签进行换行

7.form表单如何关联index.html
flask import Flask,render_template
要导一个包,需要渲染到前端页面

但有问题index.html高亮找不到模板文件index.html

templates文件夹设置一个模板语言为Jinja2的模板框架

然后就可以找到了,提示点过去

代码完整后页面成功

F12刷新可查看是不是get请求

Get请求

form表单完整代码

from flask import Flask,render_templateapp = Flask(__name__)#实例化一个app@app.route('/index')
def index():return render_template('index.html')#之前是返回字符串,现在是要导一个包,需要渲染到前端页面if __name__ == '__main__':app.run()

index.html完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="">账号:<input type="text" name="name"><br>密码:<input type="password" name="password"><input type="submit" name="submit">
</form></body>
</html>

如果要让他显示Post请求

1).修改index.html

form改为

<form action="" method="post">

2).修改form表单

默认是get请求,改为:

@app.route('/index',methods=['GET','POST'])

然后可以进行一个if判断让POST请求返回不同的页面

六.request对象

#request 包含前端发送过来的所有请求数据
1.将form表单复制粘贴过来

from flask import Flask,render_templateapp = Flask(__name__)#实例化一个app@app.route('/index',methods=['GET','POST'])
def index():return render_template('index.html')#之前是返回字符串,现在是要导一个包,需要渲染到前端页面if __name__ == '__main__':app.run()

2.

提交过后数据就会给后端,后端去接收数据

后端有两种数据的接收,一种GET 一种POST

因为request获取的是前端发送过来所有的请求数据

先导入request包,判断是get还是post要用到request.method

#request 包含前端发送过来的所有请求数据
from flask import Flask, render_template,requestapp = Flask(__name__)  # 实例化一个app@app.route('/index', methods=['GET', 'POST'])
def index():if request.method == 'GET':return render_template('index.html')  # 之前是返回字符串,现在是要导一个包,需要渲染到前端页面if request.method == 'POST':return 'this is post'if __name__ == '__main__':app.run()

这段代码是一个Python Flask web应用程序的一部分。它定义了一个名为"index"的路由,该路由可以接受GET和POST请求。

当接收到GET请求时,该路由会呈现名为"index.html"的HTML模板,并将其返回给浏览器。

当接收到POST请求时,该路由将返回一个字符串"this is post"。

这段代码通常用于创建一个基本的Web页面,其中GET请求用于呈现页面,而POST请求用于提交表单数据或其他信息。

提交后:

3.输入内容后端如何进行获取呢?
因为是form表单可以用form,get类似字典取值
name = request.form.get('name')
password = request.form.get('password')
需要看一下代码是不是name,password(在index.html中看)

#request 包含前端发送过来的所有请求数据
from flask import Flask, render_template,requestapp = Flask(__name__)  # 实例化一个app@app.route('/index', methods=['GET', 'POST'])
def index():if request.method == 'GET':return render_template('index.html')  # 之前是返回字符串,现在是要导一个包,需要渲染到前端页面if request.method == 'POST':name = request.form.get('name')password = request.form.get('password')print(name,password)return 'this is post'if __name__ == '__main__':app.run()

账号:123 密码:123

七.重定向

1.redirect有重定向的意思
from flask import Flask,redirect
比如重定向到百度(注意要添加http://)
协议写后便可进行正常的访问
代码:

#重定向 302状态
from flask import Flask,redirectapp = Flask(__name__)@app.route('/index')
def index():return redirect('https://www.baidu.com')if __name__ == '__main__':app.run()

成功访问到百度

2.(另一种重定向的方式)
url_for

from flask import Flask,redirect,url_forapp = Flask(__name__)@app.route('/index')
def index():return url_for('hello')@app.route('/')
def hello():return 'this is hello function'
if __name__ == '__main__':app.run()

访问/index结果为:

要改其中一行

return url_for('hello')

return redirect(url_for('hello'))

再次运行访问/index结果为:

3.重定向有两种方式一种是重定向到百度url另一种是重定向到自己的函数当中或者说自己的路由当中。

八.返回json数据给前端

1.在html响应当中数据可以通过多种格式进行传输,比如文本类型或者html类型json数据,图片,如打开百度可以看到一些文字和图片,这些数据的传输都有它特定的格式,flask后端该如何去做这些响应?
2.

相关包
from flask import Flask,json
make_response包传输数据
json包(前后端交互用的是json数据)

代码:

from flask import Flask,make_response,json#实例化
app = Flask(__name__)@app.route('/index')
def index():data = {'name':'张三'}return make_response(data)if __name__ == '__main__':app.run()

结果不显示张三:

所以需要修改,将python的字典转换为json的字符串,以及关闭ensure_ascii编码

return make_response(json.dumps(data,ensure_ascii=False))

成功显示张三:

但这里返回给前端的text还是html,还是属于一个文本的数据

进行相应的修改把返回给前端的改为json数据

将json格式 粘贴过来

代码为:

from flask import Flask,make_response,json#实例化
app = Flask(__name__)@app.route('/index')
def index():data = {'name':'张三'}response =  make_response(json.dumps(data,ensure_ascii=False))response.mimetype = 'application/json'return response
if __name__ == '__main__':app.run()

成功改为json数据

3.python_flask中提供了一个可以直接返回json数据的包

from flask import Flask,make_response,json,jsonify

jsonify包

代码:

from flask import Flask,make_response,json,jsonify#实例化
app = Flask(__name__)@app.route('/index')
def index():data = {'name':'张三'}#response =  make_response(json.dumps(data,ensure_ascii=False))#response.mimetype = 'application/json'#return responsereturn jsonify(data)
if __name__ == '__main__':app.run()

已经是json数据但仍有编码问题

return jsonify(json.dumps(data,ensure_ascii=False))

会让其再转换一次json数据

app.config['JSON_AS_ASCII'] = False#关掉即可

如代码:

from flask import Flask,make_response,json,jsonify#实例化
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/index')
def index():data = {'name':'张三'}#response =  make_response(json.dumps(data,ensure_ascii=False))#response.mimetype = 'application/json'#return responsereturn jsonify(data)
if __name__ == '__main__':app.run()

成功

九.abort函数

#有点类似于python中的raise 主动抛出异常
#abort 在网页当中抛出异常
1.
要导入abort包
from flask import Flask,abort
使用
abort(404)

2.做一个结合表单来进行一个验证,满足条件就登陆成功,满足不了条件就无法登陆的操作

则要有GET POST的请求
@app.route('/index',method=['GET','POST'])
要有request导入包

有问题字符串没有get方法

需要获取到前端传过来的method

所以将

if request.method.get('GET'):if request.method.get('POST'):

改为

if request.method =='GET':if request.method =='POST':

全代码:

from flask import Flask,abort,request,make_responseapp = Flask(__name__)@app.route('/index',methods=['GET','POST'])
def index():if request.method =='GET':return make_response('index.html')#即返回该页面if request.method =='POST':name = request.form.get()#获取到值password = request.form.get()if name == 'zhangsan' and password == '123':return 'login successful'else:abort(404)return Noneif __name__ == '__main__':app.run()

结果为:

如果要返回到页面也就是template模板的话

导入包render_template以及修改代码

全代码:

from flask import Flask,abort,request,make_response,render_templateapp = Flask(__name__)@app.route('/index',methods=['GET','POST'])
def index():if request.method =='GET':return render_template('index.html')#即返回该页面if request.method =='POST':name = request.form.get()#获取到值password = request.form.get()if name == 'zhangsan' and password == '123':return 'login successful'else:abort(404)return Noneif __name__ == '__main__':app.run()

结果为:

但提交后出现问题

点击提交后使用到一个POST请求

所以代码应为

name = request.form.get('name')#获取到值
password = request.form.get('password')

所以正确代码为:

from flask import Flask,abort,request,make_response,render_templateapp = Flask(__name__)@app.route('/index',methods=['GET','POST'])
def index():if request.method =='GET':return render_template('index.html')#即返回该页面if request.method =='POST':name = request.form.get('name')#获取到值password = request.form.get('password')if name == 'zhangsan' and password == '123':return 'login successful'else:abort(404)return Noneif __name__ == '__main__':app.run()

成功

Python_Flask相关推荐

  1. python小项目案例-python_flask小项目实例-编一个小网站

    要完成是这样一个网站:http://www.yushu.im/,该网站主要是赠送书的一个平台(公益性的) 网站框架功能: 网站的搭建 前期准备(用pycharm直接创建应该也可以,感觉直接创简单) 新 ...

  2. html调用python_flask之模板html中调用python函数方法

    一:html里面可以调用python写的函数 add_template_global(调用函数的引用,"调用函数的名字") from common.libs.UrlManager ...

  3. Alpha 冲刺 (8/10)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺倒计时之8 团队部分 后敬甲(组长) 过去两天完成了哪些任务 首页重新设计 课程时间线确定 答辩准备 接下来的计划 ...

  4. 1000行python代码_GitHub - kill1000/LearnPython: 以撸代码的形式学习Python

    LearnPython 以撸代码的形式学习Python, 具体说明在知乎专栏-撸代码,学知识 ===================================================== ...

  5. python alter_GitHub - sealter/LearnPython: 以撸代码的形式学习Python

    LearnPython 以撸代码的形式学习Python, 具体说明在知乎专栏-撸代码,学知识 ===================================================== ...

  6. python打招呼的代码_GitHub - worry45678/LearnPython: 以撸代码的形式学习Python

    LearnPython 以撸代码的形式学习Python, 具体说明在知乎专栏-撸代码,学知识 ===================================================== ...

  7. Flak 解析json数据不完整?

    python flask框架解析post数据的坑 当使用Python的flask框架来开发网站后台,解析前端Post来的数据,通常都会使用request.form来获取前端传过来的数据,但是如果传过来 ...

  8. python打招呼的代码_LearnPython

    LearnPython 以撸代码的形式学习Python, 具体说明在知乎专栏-撸代码,学知识 ===================================================== ...

  9. 微信小程序python flask_Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...

最新文章

  1. 深入Java泛型(二):通配符与嵌套
  2. JavaScript八张思维导图
  3. 体验Vysor Pro
  4. (三)Solrj4到Solrj5的升级之路
  5. Editplus的正则表达式
  6. Webpack 10分钟入门
  7. 22届腾讯暑期实习三轮面试面经(已oc)
  8. C语言——生命游戏(初始
  9. LeetCode 1352. 最后 K 个数的乘积
  10. AJAX -- 目录
  11. etherlime-3-Etherlime Library API-Deployed Contract Wrapper
  12. java程序员期望薪资_11月程序员平均薪资达14327元,薪资最高的居然不是JAVA?
  13. Roling in the deep
  14. FISCO BCOS(四)——— 在Ubantu上安装python3.8
  15. 关于物联网卡禁区和死卡问题的最全解释
  16. 《道德经》马王堆出土帛书版
  17. 小书匠配置github图床服务(详细版)
  18. 分享一个强大的网盘搜索平台-猪猪盘
  19. 天呐!350道Java面试真题分享
  20. java srs 推流_srs推流服务器部署

热门文章

  1. mysql连接查询和in的效率取舍
  2. 监控系统体系1-数据流监控系统
  3. iOS如何避免图像解压缩的时间开销
  4. 华为matepad切换电脑模式_华为MatePad Pro关于PC模式常用操作指南
  5. 一、使用JDK的keytool生成JKS以及获取JKS的信息
  6. python opencv resize函数_OpenCV尺寸调整函数resize
  7. 万字长文讲清楚4D毫米波雷达
  8. BAT批处理文本替换
  9. 2023基于微信小程序的校园第二课堂活动报名系统+后台管理系统(Springboot+mysql)-JAVA.VUE(论文+开题报告+运行)
  10. GTX1650 搭建TensorFlow-GPU 2.4框架(CUDA11.0 + cudnn 8.04 + anaconda 3.8)