Flask框架学习笔记(一)

本文概要,由于最近学Flask,因此总结下,有利于以后复习

一、Flask介绍
二、第一个Flask程序
三、修改配置文件
四、页面跳转和重定向
五、关于模板问题
六、使用for循环遍历值
七、继承和使用block
八、加载静态文件
九、Session和Cookie
十、POST请求
十一、Context_processor装饰器




一、Flask介绍

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。




二、第一个Flask程序

from flask import Flask

#初始化Flask对象_name_
app = Flask(__name__)

#app.route是一个装饰器,做一个url与视图函数的映射
#127.0.0.1:5000/请求 hello_world函数,返回给浏览器
@app.route('/')
def hello_world():
    return 'Hello Flask!'
    
if __name__ == '__main__':
#启动应用服务器接收请求.
#默认127.0.0.1,端口5000
    app.run()



三、修改配置文件

一些需要配置的信息可以放在配置文件中,如数据库的初始化等等.

import config	#新建一个config.py文件
app.config.from_object(config)	#导入配置信息



四、页面跳转和重定向

import url_for,redirect
from flask import Flask,redirect,url_for

app = Flask(__name__)

@app.route('/')
def index():
    Url_for = url_for('login')  #获取login函数的url
    return redirect(Url_for)	#跳转到该url


@app.route('/login/')
def login():
    return '这是登陆界面'

#可以使用<id>传输参数
@app.route('/question/<islogining>/')
def question(islogining):
    if islogining=='1':
        return u'这是问答界面'
    else:
        return redirect(url_for('login'))
if __name__ == '__main__':
    app.run(debug=True)



五、关于模板问题

在这里插入图片描述
如何渲染模板:

from flask import render_template	#导入模板类
@app.route('/')
def index():
    class Person(object):
        age = 18
    p = Person()
    context = {
        'username' : u'lin',
        'gender' : u'male',
        'person':p	#字典属性可以是一个类
    }
    return render_template('index.html',**context)	#传多个参数
<p>name : {{ username }}</p>
<p>gender : {{ gender }}</p>
<hr>
<p>age : {{ person.age }}</p>



六、使用for循环遍历值

from flask import render_template	#导入模板类
@app.route('/')
def index():
	book = [
	    {
	        'bookname': u'西游记',
	        'price': 50,
	        'author': u'吴承恩'
	    },
	    {
	        'bookname':  u'红楼梦',
	        'price':  30,
	        'author':  u'曹雪芹'
	    }
	]
	return render_template('index.html',bookName=book)
<table>
    <thead>
        <th>书名</th>
        <th>作者</th>
        <th>价格</th>
    </thead>
    <tbody>
    	<!--if也可以,注意闭合-->
        {% for book in bookName %}
            <tr>
                <td>{{ book.bookname }}</td>
                <td>{{ book.author }}</td>
                <td>{{ book.price }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>



七、继承和使用block

子类继承父类,子类拥有父类的方法,比如相同的主页模板可以使用继承.

{% extends 'base.html' %}	#定义一个接口

接口名字,block,Tab键一键补充。
在父类中写以下,表明把该地方有子类方法。
在子类中写如下,表明实现该方法。

{% block main %}	

{% endblock %}



八、加载静态文件

静态文件放在static目录下,可以有css,js,image等.

	<link rel="stylesheet" href="{{ url_for('static',filename='css/index.css') }}">



九、Session和Cookie

Cookie存储在客户端,把用户id存放到cookcie
Session存储在服务器,将用户信息经过加密后存放在session,并且产生唯一的session_id,session可以设置过期时间,通过cookie与浏览器端交互。

Flask中Session的工作机制
把敏感数据经过加密后放入Session,存放到cookie中,下次请求时候,再从浏览器发送过来的cookie中读取session,然后再从session中读取敏感数据解密,获取最终数据,节省服务器开销,把信息存储在客户端了。

操作Session

from flask import session
@app.route('/')
def index():
    session['username'] = 'You'
    return "Hello World"
@app.route('/get/')
def get():
    return session.get('username')	#返回session.id

#若需要删除session,则session.pop('username')
#若需要删除所有session,则session.clear()

设置一定时长的过期时间

from flask import session
from datetime import timedelta
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
session.permanent = True    #7天的时间



十、POST请求

默认视图函数采用get,
@app.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'GET':	#判断用户是否登录,第一次默认使用GET
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')



十一、Context_processor装饰器

解决多个页面传同样参数问题
上下文处理器返回字典,key会被当变量渲染,在所有页面都会用到。
装饰器实际上是一个函数
特点,参数是一个函数
返回值是一个函数

@app.context_processor
def my_context_processor():
    username = session.get('username')
    if username:
        return {'username':username}
    return {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值