`Python`分类下的文章

Python

Python Flask 系列教程 - 跨域资源共享

跨域资源共享 (CORS) 是一种常见的 Web 安全机制,用于限制跨域 HTTP 请求的访问。在 Python Flask 中,可以使用 Flask-CORS 扩展来实现 CORS 支持。

首先,安装 Flask-CORS 扩展:

1
pip install flask-cors

然后,在 Flask 应用程序中初始化 Flask-CORS 扩展,并设置需要允许跨域请求的来源地址:

1
2
3
4
5
6
7
8
9
10
from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "http://example.com"}})

@app.route('/api/data')
def get_data():
data = {'foo': 'bar'}
return jsonify(data)

这个例子中,我们初始化了 Flask-CORS 并设置了 resources 参数。r"/*" 表示匹配所有 URL,{"origins": "http://example.com"} 表示只允许来自 http://example.com 的跨域请求。如果需要允许多个来源地址,可以使用列表形式:{"origins": ["http://example.com", "https://example.com"]}

在视图函数中,可以直接返回 JSON 数据,Flask 会自动将其转换为响应体。通过设置 Content-Type: application/json 响应头,浏览器会自动解析响应体并将其转换为 JavaScript 对象。如果需要支持其他类型的响应格式,可以使用 Flask 提供的更多方法。

最后,记得在生产环境中使用 HTTPS 进行传输,以确保请求和响应的安全性。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 邮件发送

Python Flask是一款轻量级的Web应用框架,其易于学习和使用。在Web应用中,邮件发送是一个不可或缺的功能。Flask自带了一个简单的邮件发送模块,可以非常方便地在应用中实现邮件发送的功能。

首先,需要安装Flask-Mail库来支持邮件发送。可以通过pip命令进行安装:

1
pip install Flask-Mail

接下来,在Flask应用中进行配置:

1
2
3
4
5
6
7
8
9
10
11
from flask import Flask
from flask_mail import Mail

app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.example.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'your_email@example.com'
app.config['MAIL_PASSWORD'] = 'your_email_password'

mail = Mail(app)

以上代码中,我们配置了邮件服务器的地址、端口、是否使用SSL加密、邮箱账号和密码等信息。这些信息将被用于创建Mail对象,后面我们会用到它来发送邮件。

现在,我们可以定义一个发送邮件的函数:

1
2
3
4
5
6
7
8
from flask_mail import Message

@app.route('/send-mail')
def send_mail():
msg = Message('Hello', sender='your_email@example.com', recipients=['recipient@example.com'])
msg.body = "This is a test email sent from Flask"
mail.send(msg)
return "Sent"

在上面的代码中,我们定义了一个路由’/send-mail’,当该路由被请求时,就会调用send_mail()函数。在函数中,我们创建了一个Message对象,设置了邮件的标题、发件人和收件人等信息。然后,我们设置了邮件正文,并调用mail.send()方法发送邮件。

最后,我们返回一个字符串表示邮件已经发送成功。

注意,在实际开发中,为了保护账号密码等敏感信息,建议将这些配置信息放在环境变量中,而不是直接写在代码中。

总结起来,Flask-Mail库是一个非常方便的邮件发送模块,可以轻松地在Flask应用中实现邮件发送功能。如果需要更高级的邮件发送功能,例如支持附件、HTML格式邮件等,也可以使用其他Python邮件发送库,例如Python内置的smtplib库或者第三方库yagmail等。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 第三方登录

Python Flask 是一种轻量级的 Web 开发框架,它提供了许多有用的工具和库来帮助您快速构建 Web 应用程序。其中一个常见的需求是实现第三方登录,这使得用户可以使用其他平台的凭据(如 Google、Facebook 或 Twitter)登录您的应用程序。

在 Flask 中实现第三方登录需要以下步骤:

  1. 注册您的应用程序
    在使用第三方服务进行身份验证之前,您需要在他们的开发者平台上注册一个新的应用程序,并获取一个客户端 ID 和客户端密钥。每个第三方服务都有不同的注册过程,因此请查阅其文档以获取更多详细信息。

  2. 安装所需的库
    要使用第三方登录,您需要安装与所选服务对应的 Python 库。例如,如果您使用 Google 身份验证,则需要使用 google-auth 库。

  3. 实现登录路由
    实现一个 Flask 路由来处理第三方登录请求。该路由将在用户点击“使用 Google 登录”按钮时触发,然后将重定向到第三方服务进行身份验证。

  4. 实现回调路由
    当第三方服务验证成功时,他们将重定向回您的应用程序,并提供一个授权代码。您的应用程序需要实现一个回调路由来处理这个授权代码,并从第三方服务获取用户信息。

  5. 保存用户数据
    一旦您获得了用户的信息,您可以将其保存在数据库中,并使用 Flask-Login 库来管理用户会话。

  6. 创建模板
    最后,您需要为您的应用程序创建一个登录模板,其中包含用于触发第三方登录的按钮以及用于显示已登录用户的信息的代码。

总结:
实现第三方登录需要注册您的应用程序、安装所需的库、实现登录和回调路由、保存用户数据和创建模板。虽然这个过程可能有些复杂,但是 Flask 提供了许多有用的工具和库来帮助您成功地实现第三方登录。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 用户认证和授权

Python Flask 是一个流行的轻量级 Web 框架,它提供了易用的 API 和开发工具来构建 Web 应用程序。在开发实际应用时,用户认证和授权是必不可少的功能之一,本文将介绍如何在 Flask 应用中实现用户认证和授权。

用户认证

用户认证是确认用户身份的过程,在 Flask 中使用常见的方法是使用用户名和密码进行认证。我们可以使用 Flask 提供的扩展包 Flask-Login 来实现用户认证。

Flask-Login 提供了一个 UserMixin 类来帮助创建用户模型,并提供了登录、登出等辅助函数。下面是一个简单的用户模型示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from flask_login import UserMixin

class User(UserMixin):
def __init__(self, id_, username, password):
self.id = id_
self.username = username
self.password = password

@staticmethod
def get(user_id):
return users.get(user_id)

users = {
1: User(1, 'admin', 'password')
}

上面的代码定义了一个 User 类,并使用字典存储了一个用户列表。接着使用 Flask-Login 注册该用户模型:

1
2
3
4
5
6
7
from flask_login import LoginManager

login_manager = LoginManager()

@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)

接下来我们需要添加登录表单、登录视图函数和登录路由。这里只提供简单的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
from flask_login import login_user

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
user = users.get(1)
if user and user.password == password:
login_user(user)
return redirect(url_for('index'))
return render_template('login.html')

上面的代码中,使用 login_user 函数进行登录,并重定向到主页。这样我们就完成了用户认证的实现。

用户授权

用户授权是确认用户是否有权执行某些操作的过程。在 Flask 中,可以使用装饰器来实现用户授权。当用户没有权限时,我们可以返回 403 错误码。

下面是一个简单的授权装饰器示例:

1
2
3
4
5
6
7
8
9
10
11
from functools import wraps
from flask import abort
from flask_login import current_user

def admin_required(func):
@wraps(func)
def decorated_view(*args, **kwargs):
if not current_user.is_authenticated or not current_user.is_admin:
abort(403)
return func(*args, **kwargs)
return decorated_view

上面的代码定义了一个 admin_required 装饰器函数,用于限制只有管理员才能访问某个视图函数。

接下来,我们可以使用该装饰器来实现授权:

1
2
3
4
@app.route('/admin')
@admin_required
def admin():
return 'Admin Page'

上面的代码中,我们使用 @admin_required 装饰器来限制只有管理员才能访问 /admin 页面。

总结一下,用户认证和授权是 Flask 应用中必不可少的功能之一。通过使用 Flask-Login 扩展包和装饰器,我们可以方便地实现这些功能,并为应用程序提供更好的安全性和可靠性。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 数据库集成 - Redis

在Python Flask中使用Redis作为数据库是常见的选择,因为Redis支持高性能、可扩展和实时的数据访问。下面是如何在Flask应用程序中集成Redis的步骤:

  1. 安装Redis Python库

要使用Redis,需要安装Redis Python库。可以使用pip命令来安装:

1
pip install redis
  1. 创建Redis客户端

在Flask应用程序中创建Redis客户端很简单。只需导入redis库并实例化一个Redis对象,就可以开始与Redis进行交互了。例如:

1
2
3
4
import redis

# 创建Redis客户端
r = redis.Redis(host='localhost', port=6379, db=0)

在这个例子中,我们使用localhost和默认端口号6379连接到Redis,并使用db 0(默认值)选择Redis数据库。

  1. 存储数据

存储数据到Redis非常容易,可以使用set()方法。例如,在以下代码段中,将名为“mykey”的字符串存储在Redis中:

1
r.set('mykey', 'hello')
  1. 获取数据

获取存储在Redis中的数据也很容易。可以使用get()方法。例如,在以下代码段中,获取名为“mykey”的字符串:

1
2
value = r.get('mykey')
print(value)
  1. 删除数据

删除Redis中的数据也很容易,可以使用delete()方法。例如,在以下代码段中,删除名为“mykey”的字符串:

1
r.delete('mykey')

总结:

在Python Flask应用程序中使用Redis作为数据库非常简单。只需安装redis Python库并创建一个Redis客户端即可开始存储、获取和删除数据。Redis还支持其他许多强大的功能,如发布/订阅、事务和Lua脚本,这些功能可以帮助构建更复杂的应用程序。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 数据库集成 - MongoDB

Flask是一种流行的Python Web应用程序框架,而MongoDB则是一个非关系型数据库系统,被广泛用于开发Web应用程序。Flask和MongoDB都是开源软件,并且在开发Web应用程序时可以很好地集成使用。下面是一些简单的步骤来将MongoDB集成到Flask中。

首先,需要安装pymongo模块,该模块允许Python与MongoDB进行交互并处理数据。可以使用以下命令安装:

1
pip install pymongo

接下来,在Flask应用程序中导入pymongo:

1
2
3
4
5
6
7
from flask import Flask
from pymongo import MongoClient

app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client['test']
collection = db['my_collection']

这里创建了一个MongoClient对象,并指定了MongoDB服务器的地址和端口号。然后创建了一个名为“test”的数据库,并在其中创建了一个名为“my_collection”的集合。

现在可以使用pymongo模块向MongoDB中插入和检索数据。例如,以下代码演示了如何将一条记录插入到MongoDB中:

1
2
3
4
5
@app.route('/insert')
def insert_record():
record = {'name': 'John', 'age': 25}
collection.insert_one(record)
return 'Record inserted successfully'

这里定义了一个名为“/insert”的路由,它将数据插入到MongoDB中。record变量包含要插入的数据,collection.insert_one()方法用于将数据插入到MongoDB中。

类似地,以下代码演示了如何从MongoDB中检索数据:

1
2
3
4
@app.route('/find')
def find_record():
record = collection.find_one({'name': 'John'})
return f"Record found: {record}"

这里定义了一个名为“/find”的路由,它从MongoDB中检索具有指定名称的记录。collection.find_one()方法用于从MongoDB中检索一条记录,并将其存储在record变量中。

以上是将MongoDB集成到Flask应用程序的基本步骤。有关更多详细信息,请参考pymongo文档。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 数据库集成 - PostgreSQL

Python Flask是一种轻量级的Web框架,支持多种数据库集成。其中PostgreSQL是一款可靠、稳定且开源的关系型数据库系统。在Flask中使用PostgreSQL可以提供高效的数据存储和查询功能。

要在Flask中集成PostgreSQL,首先需要安装PostgreSQL数据库和Python的psycopg2包。然后,在Flask应用程序中设置数据库连接。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from flask import Flask
import psycopg2

app = Flask(__name__)

# 设置数据库连接参数
conn_params = {
"dbname": "mydatabase",
"user": "myuser",
"password": "mypassword",
"host": "localhost"
}

# 建立数据库连接
conn = psycopg2.connect(**conn_params)

# 创建游标对象
cur = conn.cursor()

# 查询数据库
cur.execute("SELECT * FROM mytable")
results = cur.fetchall()

# 关闭游标和连接
cur.close()
conn.close()

上述代码创建了一个Flask应用程序,并通过psycopg2库与PostgreSQL建立了连接。接下来,通过游标对象执行SQL查询语句,并将结果存储在一个变量中。最后,关闭游标和连接以释放资源。

在实际应用中,还需要注意一些事项,例如处理数据库中的敏感数据、优化查询性能、处理并发请求等。同时,也可以使用Flask扩展库如SQLAlchemy来简化数据库操作。

总之,Flask的PostgreSQL集成提供了一种强大而灵活的方式来处理数据。对于需要高效、可靠和扩展性强的Web应用程序,这是一个不错的选择。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 数据库集成 - MySQL

Python Flask 是一个轻量级的Web框架,它提供了一些基本的组件和工具,用于快速构建Web应用程序。其中,数据库集成是Flask中非常重要的一环,允许开发人员通过与数据库交互来存储和检索数据。MySQL是最流行的关系型数据库之一,它在许多Web应用程序中都被广泛使用。在本文中,我们将介绍如何在Flask中集成MySQL。

首先,我们需要安装PyMySQL库,这是一个纯Python实现的MySQL客户端库。可以使用pip命令进行安装:

1
pip install pymysql

接下来,我们需要设置MySQL连接信息,包括主机名、用户名、密码和数据库名称。我们可以在Flask应用程序的配置文件中定义这些信息:

1
2
3
4
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'username'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'database_name'

现在,我们可以连接到MySQL数据库并执行查询。为此,我们需要创建一个MySQL连接对象,并使用该对象的cursor()方法创建一个游标对象。然后,我们可以使用游标对象执行SQL语句并获取结果。以下是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pymysql

conn = pymysql.connect(
host=app.config['MYSQL_HOST'],
user=app.config['MYSQL_USER'],
password=app.config['MYSQL_PASSWORD'],
db=app.config['MYSQL_DB']
)

cursor = conn.cursor()

cursor.execute("SELECT * FROM users")

rows = cursor.fetchall()

for row in rows:
print(row)

在上面的示例中,我们查询MySQL数据库中的users表,并使用fetchall()方法获取所有行。然后,我们遍历每一行并打印出来。

以上就是在Flask中集成MySQL的基本步骤。但是,在实际应用程序中,我们通常会使用ORM(对象关系映射)库来管理数据库连接和数据模型。例如,我们可以使用SQLAlchemy库来执行这些任务。SQLAlchemy提供了一个高级别的抽象层,使得操作数据库变得更加容易。以下是一个使用SQLAlchemy进行MySQL数据库操作的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/database_name'

db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
email = db.Column(db.String(120))

@app.route('/')
def index():
users = User.query.all()
return render_template('index.html', users=users)

在上面的示例中,我们首先定义了一个User类,该类继承自db.Model。然后,我们定义了三个字段:idnameemail。接下来,我们创建了一个db对象,并设置了数据库连接信息。最后,在index函数中,我们查询了所有用户,并将它们传递给模板渲染。

总的来说,使用Flask集成MySQL是非常简单的。我们可以使用纯Python库PyMySQL来执行基本查询,或者使用高级ORM库SQLAlchemy来管理数据库连接和数据模型。无论哪种方式,都能够以一种快速、可靠和安全的方式与MySQL数据库进行交互。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 数据库集成 - SQLite

Python Flask 是一个轻量级的 Web 应用框架,它提供了一个简单而灵活的方式来构建 Web 应用程序。在开发 Web 应用时,经常需要使用数据库来存储和管理数据。SQLite 是一种轻量级的关系型数据库,它非常适合用于小型 Web 应用程序。

在 Python Flask 中集成 SQLite 可以通过 SQLAlchemy ORM 来实现。SQLAlchemy 提供了一种高级的抽象层,使得我们可以使用 Python 语言来操作数据库。下面是使用 Python Flask 和 SQLite 进行数据库集成的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'

db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)

def __repr__(self):
return '<User %r>' % self.username

@app.route('/')
def index():
users = User.query.all()
return render_template('index.html', users=users)

@app.route('/add_user', methods=['POST'])
def add_user():
username = request.form['username']
password = request.form['password']

user = User(username=username, password=password)
db.session.add(user)
db.session.commit()

return redirect('/')

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

在上面的示例代码中,我们首先导入了 Flask 和 SQLAlchemy。然后创建了一个 Flask 应用程序,并且配置了 SQLite 数据库的 URI。接着,我们定义了一个 User 模型类,它继承自 SQLAlchemy 的 Model 类,并且定义了三个属性:id、username 和 password。其中,id 属性是整数类型,作为主键;username 是字符串类型,表示用户的用户名;password 也是字符串类型,表示用户的密码。

在 User 类中还定义了一个 repr 方法,它返回一个字符串表示该对象。这个方法可以方便地帮助我们进行调试和查看对象信息。

接下来,我们使用 Flask 装饰器 @app.route() 来定义了两个路由:/ 和 /add_user。其中,/ 路由用于显示所有用户的信息,/add_user 路由用于添加新用户的信息。当用户访问 / 路由时,我们从数据库中查询所有用户的信息,并将其传递给模板引擎,以便在页面上显示用户信息。当用户提交表单并访问 /add_user 路由时,我们从请求中获取用户名和密码,并将其存储到数据库中。

最后,在 main 函数中,我们运行了 Flask 应用程序,并启用了调试模式。

总之,Python Flask 和 SQLite 结合使用可以轻松地构建 Web 应用程序,并实现数据的存储和管理。SQLAlchemy ORM 提供了高级的抽象层,使得我们可以使用 Python 语言来操作数据库。

阅读剩下更多

默认配图
Python

Python Flask 系列教程 - 文件上传

Python Flask是一個輕量級的Web框架,它可以用來開發RESTful API和Web應用程序。在Web應用程序中,文件上傳功能是非常常見的,因此在這篇文章中,我們將學習如何在Flask中實現文件上傳功能。

首先,在Flask中實現文件上傳功能需要使用到flask-wtf和Flask-Uploads這兩個庫。Flask-WTF提供了簡單的表單驗證和保護,而Flask-Uploads則提供了方便的文件上傳功能。

安裝這些庫的方法如下:

1
2
pip install flask-wtf
pip install flask-uploads

接下來,讓我們來看看如何在Flask中實現文件上傳功能。

  1. 創建一個文件上傳表單

首先,我們需要創建一個文件上傳表單。我們可以使用Flask-WTF提供的Form來創建表單。以下是一個簡單的文件上傳表單:

1
2
3
4
5
6
7
8
9
10
from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileAllowed, FileRequired
from wtforms import SubmitField

class UploadForm(FlaskForm):
file = FileField('File', validators=[
FileRequired(),
FileAllowed(['jpg', 'jpeg', 'png', 'gif'], 'Only image files are allowed!')
])
submit = SubmitField('Upload')

這個表單包含一個FileField用於接收文件,以及一個SubmitField用於提交表單。

  1. 創建一個文件上傳視圖

接下來,我們需要創建一個視圖來處理文件上傳。我們可以使用Flask-Uploads提供的UploadSet來定義一個文件上傳集合。以下是一個簡單的文件上傳視圖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from flask_uploads import UploadSet, IMAGES, configure_uploads
from flask import render_template, request

app = Flask(__name__)

photos = UploadSet('photos', IMAGES)

app.config['UPLOADED_PHOTOS_DEST'] = 'static/uploads'
configure_uploads(app, photos)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
form = UploadForm()
if form.validate_on_submit():
filename = photos.save(request.files['file'])
return f'File uploaded successfully: {filename}'
return render_template('upload.html', form=form)

這個視圖首先創建了一個UploadSet用於接收圖片文件,然後定義了一個路由’/upload’。當POST請求到達時,該視圖會驗證表單是否有效。如果表單有效,它將使用UploadSet的save方法保存文件並返回成功信息。如果表單無效,它將顯示文件上傳表單。

  1. 創建一個文件上傳模板

最後,我們需要創建一個HTML模板來顯示文件上傳表單。以下是一個簡單的模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>Upload a file:</h1>
<form method="POST" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.file.label }} {{ form.file() }}
{% if form.file.errors %}
<ul>
{% for error in form.file.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{{ form.submit() }}
</form>
</body>
</html>

這個模板使用了Flask-WTF

阅读剩下更多

默认配图
返回顶部