Falsk入门及基本操作

flask入门

封装:tcp、ip http,socket,web开发框架

安装

pip install flask

(了解) flask 框架组成

在安装flask包时,flask依赖的相关包也会安装。

  • flask 核心代码、方法封装
  • jinja2 前段渲染值得语法
  • MarkupSafe 前端特殊字符转义,防止后端渲染时出现问题。
  • itsdangerous 加密和安全工具
  • Werkzeug 德语。http协议封装。

flask约定俗成架构

├─ model.py 类、数据库表结构 模型层
├── app.py 路由、方法、业务逻辑、渲染模板方法 控制层
├── static .css .js .jpg 静态资源文件
└── templates .html 网页静态文件 控制层

基本框架

from flask import Flask, render_template, url_for
app = Flask(__name__)		# 生成应用实例

# 路由route
@app.route('/')    # 多个url指向同一方法。 127.0.0.1:5000
def hello_world():
	return 'hello world'	# 固定路由


@app.route('/index')
#  写法:127.0.0.1:5000/index
def index():
	name = '熊大'
   	age = 10
	return 	return render_template('index.html', name="熊大", age=age)	
	# name,age, 可以直接定义,也可以引用上面的

@app.route('/service')
def service():
    print(url_for('service'))
    return '服务页面'


@app.route('/about')
def about():
    return '关于我们的页面'


if __name__ == '__main__':
	app.run()
"""
# render_template()  先获取HTML模板信息,插入后端变量,最终才返回给浏览器。
本质:
# return """
#         
#             
#                 

hello {} # # # """.format(name) """ """ # url_for() url_for(endpoint) 函数: endpoint端点参数,填写方法名。注意参数对应的是函数名,跟路由的url没有关系。 1. 当ip、post发生变化时,不用前端页面。 2. 参数1静态文件夹名,参数2是filename=''。css js之类的静态资源。flask框架会对url进行预处理,前段html页面引用资源时不能写成相对路径。 前端url_for()返回结果/static/index.css,flask框架内置相关路由。 匹配可变url: @app.route('/product_list/') [domain]/product_list/2 参数转换器(不重要):# int:float: """

index页面代码


<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>首页title>
    <link rel="stylesheet" type="text/css" href="../static/index.css" >
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/index.css') }}" >
head>
<body>
    <div name="nav">
        <a href="http://127.0.0.1:5000">首页a>
        <a href="{{ url_for('service') }}">服务a>		
        <a href="http://127.0.0.1:5000/about">关于我们a>
    div>
body>
html>

CSS页面引用

	a {
    color: #5dff32;
}

完成上面的步骤一个基本的框架就出来了。

注意&小知识点

路由:

  1. 匹配固定的地址。
    ‘/’ → ‘//127.0.0.1:5000’ //127.0.0.1:5000 匹配根目录

flask命令行工具:
flask run --port=5001 --host=‘0.0.0.0’

app.run方法

app.run()方法:有几个参数

  • hots 并不是服务器的运行地址,服务器运行在本地,而是控制允许访问的客户端的地址段。默认是127.0。0.1只运行自己浏览器访问,不允许局域网其他人访问, 如果配置成’0.0.0.0’,表示接受任何ip地址的客户端,包括局域网其他人访问。
    其他人有的可以访问,包括局域网其他人访问,原因是我们现在运行的flask服务
  • port 端口,整数
  • (了解)threaded=True 开启多线程,局域网内接受多用户访问,实测也不够稳定。
  • debug=True, 开启debug模式,修改代码服务器自动重启。也可以app.config[‘DEBUG’] = True。看到日志Debug mode:on 目前是1.0.2版本。
    之前有一个版本刚才的设置并不会生效,原因是flask app运行时读取环境变量里的配置值,解决 set_FLASK_DEBUG=True。
    flask1.0.2版本,开启debug模式,终端输入。:
    set FLASK_APP = app.py
    set FLASK_ENV = development
    flask run
    优点:敏感变量存入系统环境变量,flask命令启动时会去环境变量中读配置。flask命令除了包含python命令的解释功能
    之前版本会在命令行看到服务自动重启。而1.0.2版本看不到重启信息,但是生效。

可能出现的错误

  1. not found 检查路由规则浏览器请求的url是否匹配
  2. Unicode decode error: postion 0 。flask 1.0。1源代码gethostaddr方法,如果windows主机名是中文就会报错。
  3. 修改代码,重启服务器,刷新浏览器后结果没有改变。原因ctrl+C后并没有真正结束之前的服务。cmd中运行相关命令可以看到5000端口运行多个服务。这样请求就到了之前的代码上。解决方法结束掉端口上的进程或重启。
  4. aap.py同级目录下新建了index.html, app.py文件中 return render_template(“index.html”),结果404。原因flask是一个完整的框架,有自己的规定,render_template
    函数会补全域名和template目录,所以这个函数里的参数并不是一个普通的相对路径。
    5.修改代码没有生效。原因是pycharm启动了多个程序实例。解决方法
  5. template not found 模板未找到,检查。HTML文件路径和文件名。
  6. ValueError: urls must start with a leading slash 路由没有以/开头
  7. cli.no app.exception 没有找到app示例。终端设置setFLASK_APP=app.py。虽然pycharm已自动注入环境变量。问题原因未知,cmd中换端口运行解决。
  8. 代码正确情况下css未生效。原因谷歌浏览器缓存,开发者工具里右键刷新按钮会出现三个选项选择第三个就行。
    “”"

你可能感兴趣的:(python,框架)