加载static、加载templates、页面跳转、删除coookie等
加载static、加载templates
__init__py:
def create_app():
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
templates_dir = os.path.join(BASE_DIR,'templates')
app = Flask(__name__,static_folder=static_dir,templates_folder=templates_dir)
app.register_blueprint(blueprint=blue,url_prefix='/hello')
return app
注解:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
templates_dir = os.path.join(BASE_DIR,'templates')
1. __file__代表当前文件
2. os.path.abspath(__file__),表示当前文件所在目录:C:\\workspace\\day1.1\\App\\__init__.py'
3.os.path.dirname(os.path.abspath(__file__))),表示当前目录的上一级目录:'C:\\workspace\\day1.1\\App'
4.os.path.dirname(os.path.dirname(os.path.abspath(__file__))),表示再上一级目录:'C:\\workspace\\day1.1'
5.os.path.join(BASE_DIR,'templates'),表示BASE_DIR路径下的templates目录'C:\\workspace\\day1.1\\templates
# 初始化路由,__name__代表主模块名或者包 这里name代表'App'
app = Flask(__name__,static_folder=static_dir,templates_folder=templates_dir)
# 注册路由
app.register_blueprint(blueprint=blue,url_prefix='/hello')
# 注解 url_prefix='/hello' ,作用所有的url访问时前面都要加/hello/index /hello/xxx
- reuqest请求
views.py文件中:
# 写request请求
@blue.route('/getrequest/',methods=['get','POST'])
def get_request():
if request.method =='GET':
args = request.args
else:
form = request.form
return '获取request参数'
注解:
flask中的request请求与django中的不同:
request.method = request.method
request.GET = request.args
request.POST = request.form
上面的if else条件也可以不写
- 响应,响应都是访问url时,返回一个网页
@blue.route('/makerequest/')
def make_response():
# 方式一:响应可以返回页面
# 现在修改路径后可以直接写页面了
temp = render_template('hello.html')
response = make_response(temp)
# 方式二:
response = make_response('<h2>么么哒</h2>')
return response, 300(状态码,也可以make_response(temp,300),这里就不用写了, 可以通过F12 network -all 查看状态码)
- 页面跳转
@blue.route('/redirect/')
def make_redirect():
# 跳转到页面
return redirect('hello.html')
# 跳转的第一种方法,写url
return redirect('/hello/index')
# 跳转的第二种方法 蓝图的名称下的视图函数
return redirect(url_for('first.index'))
- 处理错误
@blue.route('/makeabort/')
def make_abort():
abort(404)
return '终结'
# 处理错误和上面是搭配的 exception是页面中出现的异常错误
@blue.error(exception):
def get_error(exception):
# f12 network->all 点击make_abort会弹出下面返回的页面
return '捕捉异常:%s' % exception
- debug调试打了断点之后程序就执行到断点处不执行了,要点击重新运行后面的继续执行下面的程序,程序才能完全执行
- 下午新建项目day2.1
import os
from flask import Flask
from flask_session import Session
from App.views import blue
import redis
def create_app():
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
static_dir = os.path.join(BASE_DIR,'static')
templates_dir = os.path.join(BASE_DIR, 'templates')
app = Flask(__name__, template_folder=templates_dir,static_folder=static_dir)
app.register_blueprint(blueprint=blue, url_prefix='/app')
# 秘钥
app.config['SECRET_KEY'] = 'secret_key'
# 设置访问的数据库,使用session时使用
app.config['SESSION_TYPE'] = 'redis'
# 指定访问的redis数据库
# app.config['SESSION_REDIS'] = redis.Redis(host='',port='',password='')
# 定义存储在数据库中的前缀,在redis客户端中,通过key *命令可以查看
app.config['SESSION_KEY_PREFIX'] = 'flask'
# 初始化
Session(app)
# se = Session()
# se.init_app(app)
return app
manage.py:
from flask_sript import Manager
from App import create_app
app = create_app
manager = Manager(app)
if __name__ == '__main__':
manager.run()
views.py:
import random
from flask import Blueprint,render_template,request,session,
url_for, redirect,make_response
blue = Blueprint('app', __name__)
- session的使用可以往里面存请求的参数
@blue.route('/login/', methods=['POST', 'GET'])
def login():
if request.method == 'GET':
username = session.get('username')
return render_template('login.html',username=username)
else:
username = request.form.get('username')
session['username'] = username
return redirect(url_for('app.login'))
- 设置cookie
@blue.route('/getresponse/')
def get_response():
response = make_response('<h2>后面可以加状态码</h2>',200)
ticket = ''
s = 'asjdfkdjfkjdkf'
for i in range(20):
ticket += random.choice(s)
response.set_cookie('ticket', ticket)
return response
- 删除cookie
@blue.route('/deletecookie/')
def del_cookie():
response = make_response('<h2>删除cookie</h2>')
response.set_cookie('ticket',ticket)
return response,200
- 提交表单的格式:
<form action='' method='POST'>
姓名:<input type='text' name='username' placeholder='请输入用户名'>
<input type='submit' value='提交'>
</form>
- 挖坑继承坑,继承坑的页面中全都是 填坑的样式