2《Web应用开发与安全防护》-后端开发基础_第1页
2《Web应用开发与安全防护》-后端开发基础_第2页
2《Web应用开发与安全防护》-后端开发基础_第3页
2《Web应用开发与安全防护》-后端开发基础_第4页
2《Web应用开发与安全防护》-后端开发基础_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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)

email

=

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论