(一) Web项目系统开发工具

系列文章目录

第一章 系统开发工具

第二章 数据库配置

第三章 用户模块设计

第四章 笔记模块设计

一、开发环境及其结构

1.1 本系统的软件开发及运行环境具体如下: 

操作系统:Windows  11

开发工具:PyCharm

数据库:MySQL+PyMySQL驱动 

第三方模块:WTForms,passlib

1.2 以下是运行该项目的Python库的版本

Click 7.0
Flask 1.0.2
itsdangerous 1.1.0
Jinja2 2.10
MarkupSafe 1.1.0
passlib 1.7.1
PyMySQL 0.9.3
Werkzeug 0.14.1
WTForms 2.2.1

1.3 文件夹组织结构

二、使用步骤

2.1 使用virtualenv创建 venv 的虚拟环境

代码如下 :

virtualenv  venv

2.2 启动 venv 虚拟环境

代码如下 :

venv\Scripts\activate

2.3 安装依赖包

代码如下 :

pip    install    -r    requirements.txt

2.4 创建数据库

创建一个名为notebook的数据库,并执行notebook.sql中的SQL语句创建数据表。

2.5 运行启动文件

执行如下命令:

python manage.py

运行成功后,访问 http://127.0.0.1:5000即可进入网站。

三、安装模块

 

3.1 安装PyMySQL模块

由于MySQL服务器作为独立进程运作,并通过网络提供对外服务,因此需要安装支持Python的MySQL驱动程序以连接到MySQL服务器。在Python中,存在多种支持MySQL数据库的模块,

使用pip工具安装PyMySQL非常简单,只需在venv虚拟环境下执行以下命令:

pip install PyMySQL

3.1.1 连接MySQL

要使用PyMySQL连接数据库,首先需要导入PyMySQL模块,然后通过调用connect()方法来建立数据库连接。关键代码如下:

import pymysql

# 建立数据库连接,参数依次为:主机名或IP、用户名、密码、数据库名称
db = pymysql.connect("localhost", "root", "root", "studyPython")

# ...此处省略其他代码...

# 关闭数据库连接
db.close()

# 重点关注connect()函数的参数
db = pymysql.connect("localhost", "root", "root", "studyPython")

还有一段类似代码如下:

connection = pymysql.connect(
    host='localhost',       # 主机名
    user='root',            # 用户名
    password='root',        # 密码
    db='studyPython'        # 数据库名称
)

此外,connect()函数还接受两个常用参数设置:

  • charset:utf8:用于将MySQL字符集设置为UTF-8。
  • cursorclass:pymysql.cursors.DictCursor:用于将游标类型设置为字典类型,默认为元组类型。

3.1.2 PyMySQL的基本使用

操作MySQL的基本流程包括:连接MySQL、创建游标、执行SQL语句、关闭连接。以下示例代码演示了PyMySQL的基本使用:

import pymysql

# 建立数据库连接
db = pymysql.connect("localhost", "root", "root", "studyPython")

# 使用cursor()方法创建一个游标对象cursor
cursor = db.cursor()

# 使用execute()方法执行SQL查询
cursor.execute("SELECT VERSION()")

# 使用fetchone()方法获取单条数据
data = cursor.fetchone()
print("Database version: %s" % data)

# 关闭数据库连接
db.close()

在上述代码中,首先使用connect()方法连接数据库,然后创建游标,执行SQL语句以查看MySQL数据库版本,接着使用fetchone()方法获取数据,最后关闭数据库连接。运行结果如下:

Database version: 5.7.21-log

 

3.2 安装WTForms 模块

3.2.1 安装步骤

安装WTForms模块非常便捷,只需执行以下命令:

pip install WTForms

3.2.2 核心概念

在开始探索WTForms的世界之前,我们先来了解一下这个框架的一些关键组成部分:

  • Forms: Forms类是WTForms的心脏。它代表了一组Fields(域)的集合,你可以通过字典形式或属性形式来访问这些域。
  • Fields: Fields是WTForms的工作马。每个Field代表一种数据类型,并确保表单输入符合该数据类型。例如,InputRequired和StringField是两种不同的数据类型。除了数据,Fields还包含许多有用的属性,如标签、描述和验证错误列表。
  • Validators: Validators是WTForms的警察。它们负责检查输入是否符合特定条件,如字符串的最大长度,然后返回验证结果。如果验证失败,它们会引发一个ValidationError。这个系统既简单又灵活,允许你在字段上链接任意数量的验证器。
  • Widget: Widget是WTForms的艺术家。它的任务是渲染域(field)的HTML表示。你可以为每个域指定一个Widget实例,但每个域默认都有一个合理的Widget。
  • CSRF: CSRF(跨站请求伪造)是一种网络攻击手段,也称为one-click attack或session riding,通常缩写为CSRF或XSRF。它迫使用户在已登录的Web应用程序上执行非本意的操作。与跨网站脚本(XSS)不同,XSS利用的是用户对特定网站的信任,而CSRF利用的是网站对用户网页浏览器的信任。

3.2.3 基本操作
  1. 创建表单类。代码如下:
from wtforms import Form, BooleanField, StringField, validators

class RegisterForm(Form):
    username = StringField('Username', [validators.Length(min=4, max=25)])
    email = StringField('Email Address', [validators.Length(min=6, max=35)])
    accept_rules = BooleanField('I accept the site rules', [validators.InputRequired()])

在上述代码中,我们定义了三个属性:usernameemailaccept_rules,它们对应着表单中的三个字段。我们分别为这些字段设置了类型和验证规则。例如,username是字符串类型数据,其长度限制为4到25个字符。

2.实例化表单类,验证表单。代码如下:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        # 获取字段内容
        email = form.email.data
        username = form.username.data
        accept_rules = form.accept_rules.data
        # 省略其余代码
    return render_template('register.html', form=form)  # 渲染模板
在上述代码中,我们使用form.validate_on_submit()函数来验证表单。如果用户填写的表单内容全部满足RegisterForm中validators设置的规则,结果返回True,否则返回False。此外,使用form.email.data来获取表单中用户填写的email值。

3.模板中渲染域。创建register.html文件的关键代码如下:

<form method="POST" action="/login">
    <div>{{ form.email.label }}: {{ form.email() }}</div>
    <div>{{ form.username.label }}: {{ form.username() }}</div>
    <div>{{ form.accept_rules.label }}: {{ form.accept_rules() }}</div>
</form>

在上述代码中,使用form.username.label来获取RegisterForm类的username的名称,使用form.username来获取表单中的username域信息。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值