flask - day2

加载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>
  • 挖坑继承坑,继承坑的页面中全都是 填坑的样式

猜你喜欢

转载自blog.csdn.net/hello_syt_2018/article/details/80326251