Flask
本文最后更新于264 天前,其中的信息可能已经过时,如有错误请发送邮件到zhizihua030611@163.com

一、安装Flask框架

用anconda配置Flask框架环境,python用3.9

二、编写一个hello world

from flask import Flask

app = Flask(__name__)

// 创建路由
@app.route('/')
//创建视图函数
def hello_world:
return 'Hello,Flask!'

if __name__ == '__main__':
// 启动服务
app.run(debug=True)

debug模式是当文件修改后只需要刷新网页就可以更新,不用重启项目

host,当想别人访问你的项目,host设置成0.0.0.0

prot,可以改端口

三、读取一个网页再flask.py中

1.法一:用open函数直接读取html文件

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
  page = open('test.html',encoding='utf-8')
  return page.read()

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

2.法二:用render-template方法

from flask import Flask
from flask import render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
   
  return render_templat("test.html")

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

3.基于法二做一个可以通过ip地址及端口号路由访问一个网站

from flask import Flask
from flask import render_template
app = Flask(__name__, template_folder='templates')

@app.route('/demo')
def hello_world():
  return render_template('test.html')

if __name__ == '__main__':
  app.run(host='0.0.0.0', port=5000)

备注:

template_folder是html文件所在目录,host设置默认访问ip地址,port是端口号

四、路由

1、注册路由

a.法一

@app.route('/demo')
def hello_world():
  return render_template('test.html')

b.法二

# 定义视图函数
def hello():
  return 'Hello World!'
# 注册路由
app.add_url_rule('/', view_func=hello)

2、传参数(路径参数)

a.法一

# 定义视图函数
@app.route('/demo/<num>')
def hello_world(num):
  print(num)
  return num

b.法二

# 定义视图函数
def hello(num):
  print(num)
  return 'Hello World!'
# 注册路由
app.add_url_rule('/<int:num>', view_func=hello)

其中“ < > ”中的num即为所要传递的参数(前面加int可以直接把参数转换成整)

注意:在视图函数返回时必须是字典,元组,列表,字符串

3.请求钩子

a.before_request()

@app.before_request
def before_requset():
  print('before_requset')
@app.route('/hello1')
def hello1():
  return 'Hello1 '
@app.route('/hello2')
def hello2():
  return 'Hello2 '
@app.route('/hello3')
def hello3():
  return 'Hello3 '

会在访问每一个路由后运行一遍校验请求,可用于登录检验

b.after_request

@app.after_request
def after_request(response):
  print('再见')
  return response # 需要返回响应对象
request请求,用于加载页面或者数据时需要发送请求获取(get函数)
response
session(会话)保存数据,多个不同页面通过这个共享数据(页面间的数据通信)
application

五、对象

1.session对象

from flask import Flask, session
app = Flask(__name__)
app.secret_key = '123456'
@app.route("/A")
def hello_world_a():
  session['a'] = 'A'
  return "Hello World!A"
@app.route("/B")
def hello_world_b():
  session['b'] = 'B'
  return "Hello World!B"
@app.route("/shopcar")
def shopcar():
  good_a = session['a']
  gooo_b = session['b']
  return "shopcar: " + good_a + gooo_b

使用session前要先设置密钥

session主要用于页面间的数据通信

2.g对象

六、响应

1、直接在页面返回字符串

def hello_world():
  return 'Hello World!'
app.add_url_rule('/hello', view_func=hello_world)

2、返回html

def html():
  return '<span style="color:red">Hello html!</span>'
app.add_url_rule('/html', view_func=html)

3、返回JSON数据

from flask import jsonify
def json():
  data = {'hello': 'world','age': 30}
  return jsonify(data)
app.add_url_rule('/json', view_func=json)

为什么要用json文件,因为json文件更加节省空间。

4、返回状态码

def test_statu():
  return '正确响应', 200
app.add_url_rule('/statu', view_func=test_statu)

5、重定向

@app.route("/login")
def login():
  # 登录判断逻辑
  if(True):
      return redirect("/hello")
  else:
      return redirect('/login')

主要用于登录判断

七、连接数据库

用pymysql连接

# 创建数据库连接
conn = pymysql.connect(host='localhost', ip地址
                      user='root', 用户名
                      passwd='zys030611', 密码
                      db='user_form', 数据库名
                      port=3306, 端口,默认3306
                      charset='utf8' 编码方式)
# 进行数据库中数据对比
try:
  with conn.cursor() as cursor:
      # 假设密码在数据库中是以哈希形式存储的
      sql = "SELECT user_name, password FROM user WHERE user_name = %s"
      cursor.execute(sql, (username,))

      result = cursor.fetchone()
      print(result)

      if result and result[1] == password: # 这里直接比较明文密码
          session['user'] = username
          return redirect('/')
      else:
          flash('Invalid username or password')
finally:
  conn.close()

一定记得最后要关闭数据库连接!!

八、配置跨域

from flask_cors import CORS
CORS(app, resources=r'/*')

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇