版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web应用开发与安全防护第二篇
后端开发基础Python基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第2章Python基础2.2变量和数据类型1.
变量2.
数据类型:int,float,complex,str,list,tuple,set,dict,bool,None2.3控制结构1.
条件语句i_int
=
10f_float=3.14s_str
=
"Hello,
World!"l_list
=
["apple",
"banana",
"cherry"]t_set
=
{1,
2,
3,
4,
5}d_dict
=
{'name':
'Alice',
'age':
25}b_bool=Truex
=
10if
x
>
5:
print("x
is
greater
than
5")elif
x
==
5:
print("x
is
equal
to
5")else:
print("x
is
less
than
5")统信UOS常用Shell命令:第2章Python基础2.3控制结构2.
循环语句#
使用break语句for
i
in
range(10):
if
i
==
5:
break
#
当i等于5时退出循环
print(i)
#
使用continue语句for
i
in
range(10):
if
i
%
2
==
0:
continue
#
跳过偶数
print(i)
#
只打印奇数fruits
=
["apple",
"banana",
"cherry"]for
f
in
fruits:
print(f)count
=
0while
count
<
5:
print(ccount)
count
+=
1#
嵌套循环示例for
i
in
range(3):
for
j
in
range(2):
print(f"i={i},
j={j}")第2章Python基础2.4函数1.
定义函数2.
调用函数3.
参数4.
返回值5.
局部和全局变量6.Lambda函数7.
文档字符串8.
嵌套函数9.
闭包def
my_function(param1,
param2):
#
函数体
result
=
param1
+
param2
return
resultresult
=
my_function(5,
10)print(result)
#
输出:
15my_lambda
=
lambda
x,
y:
x
+
yprint(my_lambda(5,
10))
#
输出:
15第2章Python基础2.5类和对象1.
类(Class)2.
对象(Object)3.
示例代码4.
注意事项class
Dog:
#
类属性(通常用于定义所有实例共享的常量)
species
=
"Canis
familiaris"
def
__init__(self,
name,
age):
#
实例属性
=
name
self.age
=
age
def
bark(self):
#
实例方法
return
f"{}
says
Woof!"#
创建对象实例d
=
Dog("Rex",
3)
#
访问属性print()
#
输出:
Rex#
调用方法print(d.bark())
#
输出:
Rex
says
Woof!第2章Python基础2.6模块和包1.
模块(Module)2.
包(Package)3.
使用模块和包的好处import
mathmypackage/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.pyfrom
mypackage.module1
import
some_function第2章Python基础2.7文件操作1.
打开文件2.
读取文件3.
写入文件4.
关闭文件5.
文件路径file
=
open('filename.txt',
'r')
#
打开'filename.txt'文件('r'表示读取模式)content
=
file.read()
#
读取整个文件内容lines
=
file.readlines()
#
读取文件的所有行,并将它们作为列表返回file
=
open('data/filename.txt',
'w')file.write('Hello,
world!')
#
将字符串'Hello,
world!'写入文件file.close()
#
关闭文件with
open('Home/www/data/filename.txt',
'w')
as
file:
file.write('Hello,
world!')
#
文件会在with块结束时自动关闭第2章Python基础2.8异常处理1.
异常处理的基本结构2.
示例代码3.
捕获多个异常4.
捕获所有异常5.
自定义异常try:
#
可能引发异常的代码
result
=
10
/
0
#
这将引发一个ZeroDivisionError异常except
ZeroDivisionError:
#
处理ZeroDivisionError异常的代码
print("除数不能为零!")else:
#
如果没有异常发生,则执行这里的代码
print(f"结果是:{result}")finally:
#
无论是否发生异常,都会执行这里的代码
print("执行完毕。")第2章Python基础2.9标准库和第三方库1.Python标准库:os,sys,math,random,time,datetime,re,json,argparse,logging2.Python第三方库:NumPy,Pandas,SciPy,Matplotlib,Flask,Django,Requests,Scrapy,NLTK,spaCy,TextBlob,Pillow,OpenCV,Scikit-learn,PyTorch,TensorFlow,SQLAlchemy,sqlite3,PyQt/Python基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.1创建FlaskWeb应用步骤1:安装Flask步骤2:创建Flask应用【app.py】#
app.pyfrom
flask
import
Flask,
render_template
app
=
Flask(__name__)
@app.route('/')def
home():
return
render_template('index.html',
message='Hello,
World!')
@app.route('/about')def
about():
return
render_template('about.html')
if
__name__
==
'__main__':
app.run(debug=True)$
pip3
install
Flask第3章Flask基础:3.1创建FlaskWeb应用步骤3:创建模板:【templates/index.html】<!DOCTYPE
html><html
lang="en"><head>
<meta
charset="UTF-8">
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0">
<title>Home</title></head><body>
<h1>{{
message
}}</h1>
<a
href="{{
url_for('about')
}}">About</a></body></html>第3章Flask基础:3.1创建FlaskWeb应用步骤3:创建模板:【templates/about.html】<!DOCTYPE
html><html
lang="en"><head>
<meta
charset="UTF-8">
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0">
<title>About</title></head><body>
<h1>About
Page</h1>
<p>This
is
the
about
page
of
our
Flask
application.</p>
<a
href="{{
url_for('home')
}}">Home</a></body></html>第3章Flask基础:3.1创建FlaskWeb应用步骤4:运行:$python3app.py$
python3
app.py
*
Serving
Flask
app
'app'
*
Debug
mode:
onWARNING:
This
is
a
development
server.
Do
not
use
it
in
a
production
deployment.
Use
a
production
WSGI
server
instead.
*
Running
on
http://:5000Press
CTRL+C
to
quit
*
Restarting
with
stat
*
Debugger
is
active!
*
Debugger
PIN:
111-895-224$sudolsof-i:5000$sudokill-9<PID>Python基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.2创建数据库1.定义数据库模型:Flask-SQLAlchemy2.配置数据库连接:URI(统一资源标识符)3.创建数据库和表:4.(可选)迁移数据库:第3章Flask基础:3.2创建数据库步骤1:安装Flask-SQLAlchemy步骤2:定义Flask应用和数据库模型from
flask
import
Flaskfrom
flask_sqlalchemy
import
SQLAlchemy
app
=
Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI']
=
'sqlite:///site.db'
#
使用
SQLite
数据库作为示例app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
=
False
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)
=
db.Column(db.String(120),
unique=True,
nullable=False)
def
__repr__(self):
return
f'<User
{self.username}>'$
pip3
install
Flask-SQLAlchemy第3章Flask基础:3.2创建数据库步骤3:创建数据库和表步骤4:(可选)使用Flask-Migrate进行数据库迁移#
create_db.pyfrom
app
import
appfrom
app
import
db
with
app.app_context():
db.create_all()
print("Database
and
tables
created
successfully.")$python3
create_db.pyPython基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.3注册和登录功能步骤1:设置Flask应用:【app.py】from
flask
import
Flask,
render_template,
request,
redirect,
url_for,
flash,
sessionfrom
flask_sqlalchemy
import
SQLAlchemyfrom
werkzeug.security
import
generate_password_hash,
check_password_hash
app
=
Flask(__name__)app.config['SECRET_KEY']
=
'your_secret_key'
#
用于会话管理app.config['SQLALCHEMY_DATABASE_URI']
=
'sqlite:///site.db'
#
使用SQLite数据库app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
=
False
db
=
SQLAlchemy(app)第3章Flask基础:3.3注册和登录功能步骤2:创建用户模型【app.py】class
User(db.Model):
id
=
db.Column(db.Integer,
primary_key=True)
username
=
db.Column(db.String(150),
unique=True,
nullable=False)
password_hash
=
db.Column(db.String(150),
nullable=False)
def
set_password(self,
password):
self.password_hash
=
generate_password_hash(password)
def
check_password(self,
password):
return
check_password_hash(self.password_hash,
password)第3章Flask基础:3.3注册和登录功能步骤3:创建注册和登录表单:【templates/register.html】<!--
templates/register.html
--><!DOCTYPE
html><html
lang="en"><head>
<meta
charset="UTF-8">
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0">
<title>Register</title></head><body>
<h2>Register</h2>
<form
action="{{
url_for('register')
}}"
method="post">
<label
for="username">Username:</label>
<input
type="text"
id="username"
name="username"
required><br><br>
<label
for="password">Password:</label>
<input
type="password"
id="password"
name="password"
required><br><br>
<button
type="submit">Register</button>
</form></body></html>第3章Flask基础:3.3注册和登录功能步骤3:创建注册和登录表单:【templates/login.html】<!--
templates/login.html
--><form
method="POST"
action="{{
url_for('login')
}}">
<input
type="text"
name="username"
placeholder="Username"
required>
<input
type="password"
name="password"
placeholder="Password"
required>
<button
type="submit">Login</button></form>第3章Flask基础:3.3注册和登录功能步骤4:编写视图函数:注册路由(/register)【app.py】@app.route('/register',
methods=['GET',
'POST'])def
register():
if
request.method
==
'POST':
username
=
request.form['username']
password
=
request.form['password']
hashed_password
=
generate_password_hash(password,
method='sha256')
new_user
=
User(username=username,
password_hash=hashed_password)
try:
db.session.add(new_user)
db.session.commit()
flash('You
have
successfully
registered!',
'success')
return
redirect(url_for('login'))
except:
flash('Username
already
exists.
Please
log
in.',
'danger')
return
render_template('register.html')第3章Flask基础:3.3注册和登录功能步骤4:编写视图函数:登录路由(/login)【app.py】@app.route('/login',
methods=['GET',
'POST'])def
login():
if
request.method
==
'POST':
username
=
request.form['username']
password
=
request.form['password']
user
=
User.query.filter_by(username=username).first()
if
user
and
user.check_password(password):
session['user_id']
=
user.id
flash('You
have
successfully
logged
in!',
'success')
return
redirect(url_for('home'))
else:
flash('Login
Unsuccessful.
Please
check
username
and
password.',
'danger')
return
render_template('login.html')第3章Flask基础:3.3注册和登录功能步骤4:编写视图函数:主页路由(/)【app.py】@app.route('/')def
home():
if
'user_id'
in
session:
return
f"Welcome
back,
user
{session['user_id']}"
return
"You
are
not
logged
in.
Please
log
in."第3章Flask基础:3.3注册和登录功能步骤4:编写视图函数:注销路由(/logout)【app.py】@app.route('/logout')def
logout():
session.pop('user_id',
None)
flash('You
have
successfully
logged
out!',
'success')
return
redirect(url_for('login'))第3章Flask基础:3.3注册和登录功能步骤5:运行数据库迁移(如果使用Flask-Migrate)步骤6:运行Flask应用【create.py】#
create_db.pyfrom
app
import
appfrom
app
import
dbwith
app.app_context():
db.create_all()
print("Database
and
tables
created
successfully.")$python3
create_db.py#创建数据库$
python3
app.py#运行appPython基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.4Flask与Bootstrap步骤1:安装Flask-Bootstrap步骤2:创建Flask应用【app.py】$
pip3
install
Flask-Bootstrapfrom
flask
import
Flask,
render_templatefrom
flask_bootstrap
import
Bootstrap
app
=
Flask(__name__)Bootstrap(app)
@app.route('/')def
index():
return
render_template('index.html')
if
__name__
==
'__main__':
app.run(debug=True)第3章Flask基础:3.4Flask与Bootstrap步骤3:创建模板【templates/index.html】步骤4:运行应用{%
extends
"bootstrap/base.html"
%}{%
block
title
%}My
Flask
App{%
endblock
%}{%
block
navbar
%}<div
class="navbar
navbar-inverse"
role="navigation">
<div
class="container">
<div
class="navbar-header">
<button
type="button"
class="navbar-toggle"
data-toggle="collapse"
data-target=".navbar-collapse">
<span
class="sr-only">Toggle
navigation</span>
<span
class="icon-bar"></span>
<span
class="icon-bar"></span>
<span
class="icon-bar"></span>
</button>
<a
class="navbar-brand"
href="/">My
Flask
App</a>
</div>
<div
class="collapse
navbar-collapse">
<ul
class="nav
navbar-nav">
<li><a
href="/">Home</a></li>
<li><a
href="/about">About</a></li>
</ul>
</div>
</div></div>{%
endblock
%}{%
block
content
%}<div
class="container">
<div
class="header">
<h1>Welcome
to
My
Flask
App</h1>
</div>
<p>This
is
a
paragraph
of
text.</p></div>{%
endblock
%}$python3
app.pyPython基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.5Flask与jQuery步骤1:设置Flask应用【app.py】from
flask
import
Flask,
render_template,
jsonify
app
=
Flask(__name__)
#
路由到主页@app.route('/')def
index():
return
render_template('index.html')
#
处理
AJAX
请求的路由@app.route('/api/data',
methods=['GET'])def
api_data():
data
=
{
'message':
'Hello
from
Flask!',
'success':
True
}
return
jsonify(data)
if
__name__
==
'__main__':
app.run(debug=True)第3章Flask基础:3.5Flask与jQuery步骤2:创建HTML模板【templates/index.html】步骤3:运行Flask应用<!DOCTYPE
html><html
lang="en"><head>
<meta
charset="UTF-8">
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0">
<title>Flask
jQuery
Example</title>
<!--
引入
jQuery
库
-->
<script
src="/jquery-3.6.0.min.js"></script></head><body>
<h1>Flask
jQuery
AJAX
Example</h1>
<button
id="load-data">Load
Data</button>
<p
id="result"></p>
<script>
$(document).ready(function()
{
$('#load-data').click(function()
{
$.ajax({
url:
'/api/data',
type:
'GET',
success:
function(response)
{
$('#result').text(response.message);
},
error:
function(xhr,
status,
error)
{
$('#result').text('Error:
'
+
error);
}
});
});
});
</script></body></html>$python3
app.pyPython基础创建Flask应用创建数据库注册和登录功能FlaskBootstarpFlaskjQueryFlaskLogin搭建服务器第3章Flask基础:3.6Flask-Loginfrom
flask
import
Flask,
render_template,
redirect,
url_for,
flash,
requestfrom
flask_login
import
LoginManager,
UserMixin,
login_user,
logout_user,
login_required,
current_user
#
创建一个Flask应用app
=
Flask(__name__)app.secret_key
=
'your_secret_key'
#
用于会话管理,应该使用一个更安全的密钥
#
设置登录管理器login_manager
=
LoginManager()login_manager.init_app(app)login_manager.login_view
=
'login'
#
如果用户未登录,重定向到这个视图
#
定义用户模型(这里使用内存中的字典模拟)users
=
{
'testuser':
{
'password':
'testpassword',
#
注意:在实际应用中,密码应该被加密存储
'id':
1
#
用户ID(这里简化处理,只使用一个数字标识)
}}步骤1:安装Flask-Login步骤2:创建Flask应用【app.py】$
pip3
install
Flask-Login第3章Flask基础:3.6Flask-Loginclass
User(UserMixin):
def
__init__(self,
id,
username):
self.id
=
id
self.username
=
username
def
check_password(self,
password):
#
检查密码(这里只是简单比较,实际应用中应该验证加密后的密码)
return
users[self.username]['password']
==
password
@staticmethod
def
get(username):
#
根据用户名获取用户对象(这里从内存中获取)
if
username
in
users:
user_info
=
users[username]
return
User(id=user_info['id'],
username=username)
return
None#
当用户尝试登录时调用这个函数@login_manager.user_loaderdef
load_user(user_id):
#
根据用户ID获取用户对象(这里假设用户ID是唯一的,并且与用户名一一对应)
for
username,
user_info
in
users.items():
if
user_info['id']
==
int(user_id):
return
User(id=user_info['id'],
username=username)
return
None步骤2:创建Flask应用【app.py】第3章Flask基础:3.6Flask-Login#
路由和视图函数@app.route('/')@login_requireddef
index():
return
f'Hello,
{current_user.username}!
<a
href="{url_for("logout")}">Logout</a>'
@app.route('/login',
methods=['GET',
'POST'])def
login():
if
request.method
==
'POST':
username
=
request.form['username']
password
=
request.form['password']
user
=
User.get(username)
if
user
and
user.check_password(password):
login_user(user)
return
redirect(url_for('index'))
else:
flash('Invalid
username
or
password')
return
render_template('login.html')
@app.route('/logout')def
logout():
lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 室外给排水管道安装施工技术交底记录大全
- 垂直冷冻施工技术
- 植树节活动策划方案15篇
- 2026抖音内衣-泳衣类目达人准入考试题库核心解析
- 教育科技的趋势与未来发展方向
- 化工行业“双碳”:双碳迎来顶层护航
- 第9章:微信小程序个人记账本实战
- 风险防控目标下石油企业财务管理的加强措施
- 《丛林故事》试题(含答案)
- 2026年高考化学全国卷考试真题
- 国家广播电视总局部级社科研究项目申请书
- 2025-2030中国自行车行业市场深度调研及发展趋势与投资前景预测研究报告
- 2026年陕西延长石油集团有限责任公司校园招聘笔试备考题库及答案解析
- 工会2025年度工作报告国企2025工会工作报告
- 广东梅州市嘉城建设集团有限公司招聘笔试题库2026
- T∕SZSSIA 019-2026 反恐怖防范管理规范 总则
- 2026年及未来5年市场数据中国税务大数据行业市场全景分析及投资前景展望报告
- 2026年中考英语专题复习:5个主题作文 预测练习题(含答案+范文)
- 2026年陕西能源职业技术学院单招职业适应性考试题库附参考答案详解(完整版)
- 24J113-1 内隔墙-轻质条板(一)
- 神州数码人才测评题2
评论
0/150
提交评论