点击名片关注 阿尘blog,一起学习,一起成长
Flask是一个轻量级的WEB框架,提供了基本的web开发功能,易于学习和使用,我们将从Flask开始WEB开发之路
1 第一个Flask项目
环境准备:
pycharm(专业版)、python3.8 、flask
安装flask
pip install flask
创建flask项目
打开pycharm,新建项目,选择flask
创建好后打开结果
目录解释:
static目录存放css、JavaScript、图片等不会被服务器处理和修改的静态文件,将直接发送到客户端
templates目录主要存放用于构建网页的模板文件,HTML文件
app.py是项目入口文件,用于创建和配置Flask应用程序,以及定义路由和处理函数
程序代码,一般新建项目就会有默认的一个小程序hello world
from flask import Flask
app = Flask(__name__)
"""
Flask 是 Flask 框架的类,用于创建 Web 应用程序。
__name__ 是一个内置变量,表示当前 Python 脚本的名称。
在这个情况下,__name__ 参数用于告诉 Flask 框架当前脚本的名称,
以便它能够正确地找到静态文件和模板等资源。
"""
# 设置路由,及通过浏览器地址访问改路由下的程序,/代表根路由,也就是默认打开地址访问的
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
运行结果
打开页面
其中红色警告是由于在开发环境中,Flask应用程序是使用内置的服务器(如SimpleServer或Lighttpd)运行的,而不是使用WSGI服务器。也就是我们告诉我们在生产环境中应该要用WSGI服务器,如Gunicorn或uWSGI,来运行你的应用,因为它们提供了更多的功能和更好的性能。
这个后面部署生产环境可以再说,当然现在也可以解决
方法一:使用WSGIRef的WSGIServer
安装WSGIRef库。可以使用pip命令安装:
pip install wsgiref
然后修改代码改成使用wsgi启动,如下
from wsgiref.simple_server import make_server
if __name__ == '__main__':
httpd = make_server('127.0.0.1', 5000, app)
httpd.serve_forever()
方法二:使用Gevent的WSGIServer
安装Gevent和pywsgi库。可以使用pip命令安装:
pip install gevent pywsgi
然后修改代码
from gevent import pywsgi
if __name__ == '__main__':
server = pywsgi.WSGIServer(('127.0.0.1', 5000), app)
server.serve_forever()
2 项目配置
debug模式,可以运行一下代码,可以右键debug运行
if __name__ == '__main__':
app.run(debug=True)
debug模式有利于开发一遍修改bug,一遍查看效果,如果debug关闭,修改完代码之后必须要关闭服务器,重新开启项目才能看到
或者在终端运行一下命令
flask --app app run --debug
开启debug模式将自动重新加载,可以在浏览器看到报错信息
修改host:可以远程访问
终端运行
flask run --host=0.0.0.0
修改端口:如果端口被占 OSError: [Errno 98]
终端运行
flask run --host=0.0.0.0 --port=8000
注意:如果代码运行也没开启debug模式那么就需要编辑一下配置
3 url与视图
我们一般通过route()装饰器来将函数与对应的url绑定
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
@app.route('/booklist')
def booklist():
return 'this is booklist''
@app.route('/booklist/<book_id>')
def book_detail(book_id):
return f'your book id is {book_id}'
4 HTTP方法
Web应用程序在访问URL时使用不同的HTTP方法。在使用flask时,应该熟悉HTTP方法。默认情况下,一个路由只回应 GET 请求。可以使用 route() 装饰器的 methods 参数来处理不同的 HTTP 方法:
from flask import Flask,request,redirect,url_for,render_template
@app.route('/')
def redirect_login(): # put application's code here
return redirect(url_for('login'))
@app.route('/login',methods=['GET','POST'])
def login():
return render_template('login.html')
这段代码,将会在输入url时候直接重定向到登录页,而登录页我们用methods参数来定义请求方法
当然flask也提供了快捷创建不同请求的方法
@app.get('/login')
def login_get():
return show_the_login_form()
@app.post('/login')
def login_post():
return do_the_login()
5 渲染模板
在前面说到,模板里面,一般存放html文件,但是在python里面不是很方便生成HTML文件,所以在安装flask,自动安装配置了jinja2,可以提供模板引擎
使用 render_template() 方法可以渲染模板,你只要提供模板名称和需要 作为参数传递给模板的变量就行了。下面是一个简单的模板渲染例子:
from flask import Flask,request,redirect,url_for,render_template
@app.route('/')
def redirect_login(): # put application's code here
return redirect(url_for('login'))
@app.route('/login',methods=['GET','POST'])
def login():
return render_template('login.html')
其中我们需要在templates里面创建一个login.html文件,如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>阿尘blog登录页</title>
</head>
<body>
欢迎来到阿尘blog
</body>
</html>
查看运行实际结果
Flask 会在 templates 文件夹内寻找模板。因此,如果你的应用是一个模块, 那么模板文件夹应该在模块旁边;如果是一个包,那么就应该在包里面:
第一种
/app.py
/templates
/hello.html
第二种
/application
/__init__.py
/templates
/hello.html
渲染变量
如果要在html传入变量,那么就需要对变量进行渲染,如下:
@app.get('/booklist/<int:book_id>')
def book_detail(book_id):
return render_template('book_detail.html',book_id=book_id,username='阿尘')
其中book_detail.html文件如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍详情</title>
</head>
<body>
<p>欢迎用户{{ username }}</p>
<p>您正在访问book ID 为{{ book_id }}的书籍详情</p>
</body>
</html>
6 模板访问对象属性
app代码如下
class Person():
def __init__(self,username,email):
self.username = username
self.email = email
@app.route('/userinfo')
def userinfo():
user = Person(username='阿尘',email='xxx@gmail.cn')
user2 = {
"username":'七七',
"email":'9999@gmial.cn'
}
return render_template('userinfo.html',user=user,user2=user2)
userinfo.html内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户详情</title>
</head>
<body>
<div>姓名:{{ user.username }}</div>
<div>邮箱:{{ user.email}}</div>
<div>紧急联系人:{{ user2['username'] }}</div>
<div>紧急联系人邮箱:{{ user2['email'] }}</div>
</body>
</html>
实际结果
这段代码我们访问了类,和字典的属性,这在以后的学习和使用中有很大的意义
好了今天分享到此结束,下期继续!!!
扫描二维码关注阿尘blog,一起交流学习