Python Web之路:Flask第一篇

点击名片关注 阿尘blog,一起学习,一起成长

Flask是一个轻量级的WEB框架,提供了基本的web开发功能,易于学习和使用,我们将从Flask开始WEB开发之路

1 第一个Flask项目

环境准备:

pycharm(专业版)、python3.8 、flask

安装flask

pip install flask

创建flask项目

打开pycharm,新建项目,选择flask

259577bfd00de66aa786a7e61cfbe983.png

创建好后打开结果

a1db5608b2a7b541ea449bbb2f850fd2.png

目录解释:

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()

运行结果

bf51ac68e36c8c43666260ad6640072f.png

打开页面

f55f20f68f34d840f9df7d05bf644cf2.png

其中红色警告是由于在开发环境中,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模式那么就需要编辑一下配置

67af547b2dd97f52d365a8a1f7791454.png

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>

查看运行实际结果

b56e68f9b5504d51bc8944ed03f7c426.png

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>

aa4d32458a62400ddb568d7d5e581704.png

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>

实际结果

9744b1b50edf16fa305cddd5b9dd6ea1.png

这段代码我们访问了类,和字典的属性,这在以后的学习和使用中有很大的意义

好了今天分享到此结束,下期继续!!!

扫描二维码关注阿尘blog,一起交流学习

27d519610a7485f2ec492b450db191ac.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是阿尘呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值