Flask框架初学-01-环境准备

一、Flask简介

​ Flask是一种使用python编写的轻量级的web微框架,它可以很好地结合MVC模式进行开发,具有很强的兼容性和扩展性,用户可以根据自己的需求来添加相应的功能,其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Werkzeug库十分强大,功能比较完善,支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。

Flask的基本模式为在程序里将一个视图函数分配给一个URL,每当用户访问这个URL时,系统就会执行给该URL分配好的视图函数,获取函数的返回值并将其显示到浏览器上(百度摘录):

在这里插入图片描述

flask参考教程:
https://www.w3cschool.cn/flask/
https://dormousehole.readthedocs.io/en/latest

二、环境准备

创建虚拟环境

注:创建独立项目虚拟机的目的是为了防止因其它项目毁坏环境,导致该项目无法运行的情况。以下是一些虚拟机常用命令

pip install virtualenv 

创建虚拟环境

mkvirtualenv 环境名

切换虚拟环境

workon 环境名

列出虚拟环境

lsvirtualenv

删除虚拟环境

rmvirtualenv

安装Flask

注:高于1.1.2版本的flask可能会出现不兼容的情况

pip install flask  == 1.1.2

安装Flask时,会自动安装以下依赖:

依赖
Werkzeug用于实现 WSGI ,应用和服务之间的标准 Python 接口
Jinja用于渲染页面的模板语言
MarkupSafe与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击
ItsDangerous保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie
Click是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义 管理命令

三、项目启动

flask框架项目结构

在这里插入图片描述

static一般用来存放一些静态文件,如css、images、js等

templates用来存放模板,即html前端界面

app.py是整个程序运行的入口

一个简单的flask应用

可以通过一个简单的example,进入到flask的世界

settings.py 配置文件,可配置不同环境的不同变量

# 配置文件
ENV = 'development'
DEBUG = True

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p><a href="" name="注册" >注册</a></p>
<p><a href="" name="登录" >登录</a></p>
<p><a href="" name="展示" >展示</a></p>

</body>
</html>

register2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎来到我的学习乐园</h1>
<div>
    <form action="/register2" method="post">
        <p><input type="text" name="username" placeholder="请输入用户名"></p>
        <p><input type="text" name="password" placeholder="请设置密码"></p>
        <p><input type="text" name="repassword" placeholder="请再次确认密码" </p>
        <p><input type="submit" value="注册"></p>
    </form>
</div>
</body>
</html>

app.py

import json

from flask import Flask, Response, request, render_template, url_for
from werkzeug.utils import redirect

import settings

# 创建一个Flask实例
app = Flask(__name__)
# 导入外部文件,这里导入settings配置
app.config.from_object(settings)   
'''
print(app.config)
返回一个字典:
<Config {'DEBUG': True, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'LOGGER_NAME': '__main__', 'LOGGER_HANDLER_POLICY': 'always', 'SERVER_NAME': None, 'APPLICATION_ROOT': None, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': False, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': True, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'ENV': 'development'}>
'''

data = {'a':'北京','b':'上海','c':'深圳'}

users = []

# 修改环境 环境有:production   development testing
# app.config['ENV'] = 'development'

# 修改debug的状态
# app.config['DEBUG'] = True



# 默认ip为 127.0.0.1:5000  这里的'/'指的是http://127.0.0.1:5000/  endpoint 为路径命名
@app.route('/',endpoint='index')
def hello_word():
    return render_template('index.html')


@app.route('/register')
def register():
    # 默认从templates文件夹里查询.html文件
    # r = render_template('register.html')
    r = render_template('register2.html')
    print(r)
    return r

@app.route('/come', methods=['GET','POST'])
def come():
    print(request.full_path)
    print(request.path)
    # 只能取到GET请求的传参
    print(request.args)
    # print(request.args.get('username'))
    # print(request.args.get('address'))
    # 可以取到POST请求的传参
    print(request.form)
    print(request.form.get('username'))
    print(request.form.get('address'))
    return "进来了"

@app.route('/register2',methods=['GET','POST'])
def register2():
    username = request.form.get('username')
    password = request.form.get('password')
    repassword = request.form.get('repassword')
    if password == repassword and username != '':
        user = {'username':username,'password':password}
        users.append(user)
        # 重定向到名为index的路径'/'
        return redirect(url_for('index'))
        # return 'register success !'
    return render_template('register2.html')

@app.route('/show')
def show():
    json_str = json.dumps(users)
    return json_str

@app.route('/test')
def test():
    url = url_for('index')
    print(url)

# 绑定路由规则
# app.add_url_rule('/index',view_func=index)

if __name__ == '__main__':
    # 路由规则表
    # print(app.url_map)
    # host改成0.0.0.0,同一局域网下的其他主机可进行访问
    # debug默认为off,即false,代码发生改变不会自动加载 适用于production环境;debug=True,只要代码发生改变,服务器会重新加载最新代码 适用于开发环境     development
    # run(host='0.0.0.0',port='',debug='True')
    # app.run(port=8008)
    app.run()

访问结果:
在这里插入图片描述

知识点:

知识点1:
	设置配置文件settings,环境:production   development   testing
		ENV = 'development'
		DEBUG = True


	导入外部文件,这里导入settings配置
		import setting
		1、app.config.from_object(settings)
		2、app.config.from_pyfile('settings')

	引用配置文件settings:
		print(app.config) ---->字典
		app.config['ENV'] = 'development'
		app.config['DEBUG'] = True

知识点2:
	app.run(host='0.0.0.0',port=5001,debug=True)
	host改成0.0.0.0,同一局域网下的其他主机可进行访问
	debug:布尔型
	debug = True  开启了debug调试模式  只要改变服务器代码会重新加载最新的代码 适用于开发环境development
	debug = False 默认 代码发生改变不会自动加载  适用于production环境

知识点3:
	路由(下一章详解):
		# 默认ip为 127.0.0.1:5000  这里的'/'指的是http://127.0.0.1:5000/  endpoint 为路径命名
		@app.route('/',endpoint='index')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值