flask学习--01

第一讲

#从flask包中导入Flask对象
from flask import Flask

#使用Flask创建一个app对象,并且传递__name__参数
app = Flask(__name__)

#@app.route: 设置页面访问的url,这里是设置成一个根路径
def hello_world():
	return 'Hello World'

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

第二讲

debug模式

  • flask会在每次保存代码的时候自动加载代码,并且如果代码有错误,会在终端进行提示

配置文件

  • 直接硬编码
app = Flask(__name__)
app.config['SECRET_KEY'] = "xxx"
  • 把所有的配置项都放在一个模块中,例如settings.py,然后通过app.config.from_object()加载模块的方式进行配置。该方法既可以接收模块的的字符串名称,也可以模块对象。
# 1. 通过模块字符串
app.config.from_object('settings')
# 2. 通过模块对象
import settings
app.config.from_object(settings)

第三讲

URL与函数的映射

  • 一个URL要与执行函数进行映射,使用的是@app.route装饰器。
@app.route('/article/<id>/')
def article(id):
   return '%s article detail' % id
#其中<id>,尖括号是固定写法,语法为<variable>,variable默认的数据类型是字符串。
#如果需要指定类型,则要写成<converter:variable>,其中converter就是类型名称

构造URL(url_for)

  • 知到一个函数名获取这个函数对应的URL,可以通过url_for()。
  • url_for():接收函数名作为第一个参数,其他参数作为url查询参数添加到url的后面。
  • 如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
from flask import Flask,url_for
app = Flask(__name__)

@app.route('/article/<id>/')
def article(id):
    return '%s article detail' % id

@app.route('/')
def index(request):
    print(url_for("article",id=1))
    return "首页"

指定methods方法

  • 在@app.route()传入关键字参数methods来指定访问url的方法,get(从服务器中获取数据)或者post(把数据发给服务器)。
@app.route('/login/',methods=['GET','POST'])
def login():
    return 'login'

页面跳转和重定向

  • 参数传递的两种形式

    • 作为url的组成部分:/book/1
    • 查询字符串:/book?id=1
  • 重定向两种方式:永久性重定向301,暂时性重定向302.

  • flask.redirect(location,code=302) :location表示需要重定向到URL,应该配合之前讲的url_for()函数来获取。code表示采用哪种重定向。

 from flask import Flask,url_for,redirect

 app = Flask(__name__)
 app.debug = True

 @app.route('/login/',methods=['GET','POST'])
 def login():
     return 'login page'

 @app.route('/profile/',methods=['GET','POST'])
 def profile():
     name = request.args.get('name')

     if not name:
     # 如果没有name,说明没有登录,重定向到登录页面
         return redirect(url_for('login'))
     else:
         return name

第四讲

模板简介

  • 渲染网页的时候,并不只是渲染一个纯文本字符串,而是渲染一个富有文本标签的页面。
  • 通过render_template方法渲染一个模板。
from flask import Flask,render_template
app = Flask(__name__)

@app.route('/about/')
def about():
    return render_template('about.html')
  • 当访问/about/的时候,about()函数会在当前目录下的templates文件夹下寻找about.html文件。
  • 如果想更改模板文件地址,应该在创建app的时候,给Flask传递一个关键字参数template_folder,指定具体的路径。
from flask import Flask,render_template
app = Flask(__name__,template_folder=r'C:\templates')

@app.route('/about/')
def about():
    return render_template('about.html')
  • 在模板中传递参数:使用字典进行包装,参数名字前加两个**号使其成为关键字参数。
from flask import Flask,render_template
app = Flask(__name__)

@app.route('/about/')
def about():
    # return render_template('about.html',user='zhiliao')
    return render_template('about.html',**{'user':'zhiliao'})

第五讲

  • 过滤器是通过管道符号( | )进行使用的。
  • 过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。

第六讲

  • 控制语句:所有的控制语句都是放在{% … %}中,并且有一个语句{% endxxx %}来进行结。常用的有if/for…in
{% if age > 18 %}
    <div>您已成年!</div>
{% elif age < 18 %}
    <div>您未成年!</div>
{% else %}
    <div>您刚成年!</div>
{% endif %}
{% for book in books %}
    <li>{{ book }}</li>
{% endfor %}

第七讲

  • Flask中的模板可以继承,通过继承可以把模板中许多重复出现的元素抽取出来,放在父模板中,并且父模板通过定义block给子模板开一个口,子模板根据需要,再实现这个block.
  • 父模版
<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="base.css" />
    <title>{% block title %}{% endblock %}</title>
    {% block head %}{% endblock %}
</head>
<body>
    <div id="body">{% block body %}{% endblock %}</div>
    <div id="footer">
        {% block footer %}
        &copy; Copyright 2008 by <a href="http://domain.invalid/">you</a>
        {% endblock %}
    </div>
</body>
</html>
  • 子模版
{% extends "base.html" %}
{% block title %}首页{% endblock %}
{% block head %}
    {{ super() }}
    <style type="text/css">
        .detail{
            color: red;
        }
    </style>
{% endblock %}
{% block content %}
    <h1>这里是首页</h1>
    <p class="detail">
      首页的内容
    </p>
{% endblock %} 
  • 模板中不能出现重名的block,如果一个地方需要用到另外一个block中的内容,可以使用self.blockname的方式进行引用
<title>
    {% block title %}
        这是标题
    {% endblock %}
</title>
<h1>{{ self.title() }}</h1>

第八讲

  • 静态文件的配置:通过url_for全局函数加载静态文件
<link href="{{ url_for('static',filename='about.css') }}">

第九讲

  • 蓝图:url和视图在不同文件下编写。

  • 蓝图文件

from flask import Blueprint
bp = Blueprint('user',__name__,url_prefix='/user/')

@bp.route('/')
def index():
    return "用户首页"

@bp.route('profile/')
def profile():
    return "个人简介"
  • 主程序文件
from flask import Flask
import user

app = Flask(__name__)
app.register_blueprint(user.bp)

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=9000)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值