Flask-bootstrap python16

1)get方法
1.获取页面信息
1)一般情况,不会直接把html文件内容直接返回,而是将html文件保存到当前的目录中:
2)通过方法调用;
默认情况下,Flask 在程序文件夹中的子文件夹中寻找模板 。
2.可以提交数据信息,但是数据不安全
eg::5000/login/?=root&=
from flask import Flask, render_template, request, redirectapp = Flask(__name__)@app.route('/')def index():return"主页"@app.route('/login/')def login():# 一般情况,不会直接把html文件内容直接返回;# 而是将html文件保存到当前的templates目录中;#1). 通过render_template方法调用;#2). 默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板 。returnrender_template('login.html')@app.route('/login2/')def login2():# 获取用户输入的用户名username = request.args.get('username', None)password = request.args.get('password', None)# 逻辑处理, 用来判断用户和密码是否正确;if username == 'root' and password == 'redhat':# 重定向到指定路由;returnredirect('/')# return "登录成功"else:return"登录失败"if __name__ == '__main__':app.run()
from flask importFlask, request, render_template, redirectapp = Flask(__name__)@app.route('/')def index():return"这是主页"# 默认路由只支持get方法,如何指定接受post方法?@app.route('/login/', methods=['GET', 'POST'])def login():if request.method == 'POST':# 难点: post请求提交的数据如何获取?print(request.form)username = request.form.get('username', None)password = request.form.get('password', None)# 如果用户名和密码正确,跳转到主页;if username == 'root' and password == 'redhat':returnredirect('/')# 如果登录不正确, 则警告红色信息;还是在登录页面;else:# 可以给html传递变量returnrender_template('login_post.html',errMessages="用户名或者密码错误")else:returnrender_template('login_post.html')@app.errorhandler(404)def page_not_found(e):returnrender_template("404.html"), 404@app.errorhandler(500)def internal_server_error(e):returnrender_template("500.html"), 500if __name__ == '__main__':app.run()
在目录中创建 login.html 文件:
Title用户登录

用户:
密码:

登录成功后则不显示用户名和密码,保证了数据的安全
2)post方法并自定义错误页面
提交服务端需要的请求信息,有利于数据的安全性
from flask importFlask, request, render_template, redirectapp = Flask(__name__)@app.route('/')def index():return"这是主页"# 默认路由只支持get方法 ,  如何指定接受post方法?@app.route('/login/', methods=['GET', 'POST'])def login():if request.method == 'POST':# 难点: post请求提交的数据如何获取?print(request.form)username = request.form.get('username', None)password = request.form.get('password', None)# 如果用户名和密码正确, 跳转到主页;if username == 'root' and password == 'redhat':returnredirect('/')# 如果登录不正确,则警告红色信息;还是在登录页面;else:# 可以给html传递变量returnrender_template('login_post.html',errMessages="用户名或者密码错误")else:returnrender_template('login_post.html')@app.errorhandler(404)def page_not_found(e):returnrender_template("404.html"), 404@app.errorhandler(500)def internal_server_error(e):returnrender_template("500.html"), 500if __name__ == '__main__':app.run()
在目录中创建 .html 文件:
Title用户登录
用户:
密码:
{{ errMessages }}

登录成功,则返回主页;登录失败,则警告红色信息:
#自定义错误页面
1.为什么要自定义错误页面?
如果你在浏览器的地址栏中输入了不可用的路由,那么会显示一个状态码为 404 的错误页面 。现在这个错误页面太简陋、平庸,所以你可以根据自己的喜好自定义错误页面 。
2.如何自定义错误页面?
像常规路由一样,Flask 允许程序使用基于模板的自定义错误页面 。
最常见的错误代码有两个:
404:客户端请求未知页面或路由时显示;
500:有未处理的异常时显示 。
3.自定义错误页面
Title404
Title 服务器正忙,请稍后再试
2.模板引擎
1. 什么是模板引擎?
1.的Web开发中,业务逻辑(实质就是视图函数的内容)和页面逻辑(html文件)分开的, 使得代码的可读性增强, 代码容易理解和维护;
2.模板渲染: 在html文件中,通过动态赋值 ,将重新翻译好的html文件(模板引擎生效) 返回给用户的过程 。
3.其他的模板引擎: Mako, ,
2. 语法
1) 变量显示语法: {{ 变量名 }}
完整的过滤器查看位置: #-
变量内置过滤器:
如何自定义过滤器?
from flask importFlask, render_templateapp = Flask(__name__)class User(object):def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return"" %(self.name)@app.route('/')def index():message = " this is a Message "li = ['fentiao', 'fensi', 'fendai']info = {'name': 'fentiao','age':10}fentiao = User(name="粉条", age=5)tags = "hello world"returnrender_template('06_index.html',message=message,names = li,info=info,fentiao=fentiao,tags = tags)@app.route('/users/')def users():usersinfo = [('user%s' %(i), "password%s" %(i)) for i in range(100)]returnrender_template('06_users.html',usersinfo = usersinfo)@app.route("/macro/")def macro():returnrender_template('06_macro.html')@app.route('/extends/')def extends():returnrender_template('06_use_block.html')# **********************自定义过滤器******************************# 定义一个函数def format_data(s):return"这是一个过滤器:" + s# 将该函数添加到默认过滤器中;app.add_template_filter(format_data, 'fmt')if __name__ == '__main__':app.run()
在index.html中写过滤器:
Title{{ message| fmt}}
{{ message| lower}}
{{ message| upper}}
{{ message| title}}
{{ message| capitalize}}
{{ names }}
{{ info }}
{{ fentiao }}
{{ tags | striptags }}
{{ tags| safe }}

这是一个过滤器: this is a Messagethis is a messageTHIS IS A MESSAGEThis Is A Messagethis is a message['fentiao', 'fensi', 'fendai']{'name': 'fentiao', 'age': 10}hello worldhello world
2)for循环:
{% for i in li%}{% endfor %}
3)if语句
{% if user == 'westos'%}{% elif user == 'hello' %}{% else %}{% endif%}
*4)宏的操作====相当于函数*
{%macro render(id) %}hello world {{ id }}{% endmacro %}
{{ render(1) }}{{ render(2) }}{{ render(3) }}
5)包含操作
如何使用:
{% include"06_inclued.html"%}
6)模板的继承
一般网站的导航栏和底部不会变化,为了避免重复编写导航栏信息;
{% block title %}{% endblock %} 这是导航栏{% block body %}hello{% endblock %}这是底部
{% extends'06_base.html'%}{% block title %}继承案例{% endblock %}{% block body %}这是最新填的block内容{% endblock %}
3.前端框架
1.什么是框架?
是美国公司推出的一个用于前端开发的开源工具包 。它由的设计师Mark Otto和Jacob 合作基于HTML、CSS、 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷 。
提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成 。
学习网站:
2.flask项目静态文件的导入
用框架写HTML之前,先了解几个知识点:
导入静态文件
两种方法:
# 通过路径导入# 通过url_for函数导入
3.flask链接的导入
两种方法:
# 直接查找路由注册# 根据视图函数动态的去查找路径登录删除 == /delete/root/
4.消息闪现
Flask-bootstrap  python16

文章插图
1)如何实现闪现?
flash 闪现消息这种功能,是Flask的核心特性 。用于在下一个响应中显示一个消息,让用户知道状态发生了变化 。可以确认消息,警告或者错误提醒 。
2)工作原理
闪现系统使得在一个请求结束的时候记录一个信息,然后在且仅仅在下一个请求中访问这个数据 。
3)使用方法
flash(“闪现的消息”)
4)html代码中如何调用闪现内容?
仅调用flash()函数并不能把消息显示出来,程序使用的模板要渲染这些消息;Flask把()函数开放给模板 , 用来获取并渲染消息
5.用户信息的保存
:客户端浏览器的缓存
:服务端缓存
1)的作用
对象存储特定用户会话所需的属性及配置信息 。
1.当用户在应用程序的 Web 页之间跳转时,存储在对象中的变量将不会丢失,而是在整个用户会话中一直存在下去 。
2.当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个对象 。
3.当会话过期或被放弃后,服务器将终止该会话 。对象最常见的一个用法就是存储用户的首选项 。
from flask importFlask, sessionimportrandomapp= Flask(__name__)app.config['SECRET_KEY'] =random._urandom(24)# 设置是24位的字符, 每次运行服务器的secret_key都是不同的,# 服务器重启后会清除上一次存储的session信息值;
2)设置值
@app.route('/')def index():# 如何设置session的key-value值session['name'] = 'westos'return "hello world"
3)获取
@app.route('/get/')def get():returnsession.get('name')
4)删除
@app.route('/delete/')def delete():print(session.get('name'))session.pop('name')print(session.get('name'))return'delete'
6.应用 —— 实现用户注册,用户登录 ,  用户注销,用户查看
1)首先创建一个Flask项目
File ----> New----> Flask
2.在 app.py 中写需要实现基本路由和视图函数
代码:
from functools import wrapsfrom flask import Flask, render_template, request, redirect, flash, url_for, sessionusers = [{'username': 'root','password': 'root'}]app = Flask(__name__)app.config['SECRET_KEY'] = 'westos'def is_login(f):"""用来判断用户是否登录成功"""@wraps(f)def wrapper(*args, **kwargs):# 判断session对象中是否有seesion['user']:# 如果包含信息,则登录成功,可以访问主页;# 如果不包含信息,则未登录成功,跳转到登录界面;if session.get('user', None):return f(*args, **kwargs)else:flash('用户必须登录才能访问主页%s' % (f.__name__))return redirect(url_for('login'))return wrapperdef is_admin(f):"""用来判断用户是否为管理员"""@wraps(f)def wrapper(*args, **kwargs):# 如果是管理员 , 则可以访问;# 如果不是管理员,则跳转到登录界面登录管理员账号;if session.get('user', None) == 'root':return f(*args, **kwargs)else:flash('只有管理员root才能访问%s' % (f.__name__))return redirect(url_for('login'))return wrapper@app.route('/')@is_logindef index():return render_template('index.html')@app.route('/register/', methods=['GET', 'POST'])def register():if request.method == 'POST':username = request.form.get('username', None)password = request.form.get('password', None)# 当所有的信息遍历结束,都没有发现注册的用户存在,则将注册的用户添加到服务器,并跳转登录界面for user in users:if user['username'] == username:return render_template('register.html', message='用户%s已经存在' % (username))else:users.append(dict(username=username, password=password))# 出现一个闪现信息flash('用户%s已经注册成功,请登录......' % (username))return redirect(url_for('login'))return render_template('register.html')@app.route('/login/', methods=['GET', 'POST'])def login():if request.method == 'POST':username = request.form.get('username', None)password = request.form.get('password', None)for user in users:if user['username'] == username and user['password'] == password:# 将用户登录的信息存储到session中session['user'] = usernamereturn redirect(url_for('index'))else:flash('用户名或密码错误,请重新登录......')return redirect(url_for('login'))return render_template('login.html')@app.route('/logout')def logout():# 将用户存储到session中的信息删除session.pop('user')flash('注销成功')return redirect(url_for('login'))@app.route('/delete//')def delete(username):for user in users:# 用户存在,则删除if username == user['username']:users.remove(user)flash('删除用户%s成功' % (username))# 删除成功,跳转到/list/路由中return redirect(url_for('list'))@app.route('/list/')@is_login@is_admindef list():return render_template('list.html', users=users)if __name__ == '__main__':app.run()
3)在 目录下创建 xxx.html 文件实现页面
将页面导航栏、页面样式和闪现信息写在继承模板 base.html 中:
西部开源-{% block title %} {% endblock %}.navbar {font-size: 130%;background: whitesmoke;margin-top: 10px;padding-top: 5px;box-shadow: 2px 2px 2px 2px lightgray;height: 60px;}Todo{# 让每个页面都可以获取闪现信息闪现 #}{% for item in get_flashed_messages() %}{{ item }}{% endfor %}{% block content %}{% endblock %}
4)主页页面 index.html
{% extends 'base.html' %}{% block title %} 主页 {% endblock %}{% block content %}这是主页{% endblock %}
5)注册页面 .html
{% extends 'base.html' %}{% block title %} 注册页面 {% endblock %}{% block content %}注册已有帐号登录{# action: 将表单填写的数据提交到那个URL里面进行处理 #}{# url_for('register'): 根据视图函数寻找对应的url地址 == /register/ #}{# method =['post', 'get']: 这种是错误的 , 提交数据只能选择一种HTTP请求方法 #}
{# name="username": 将name里面的值username作为key值,表单里面填写的内容作为value值,提交到request.form #}{# type="text": 要求填写的是一个字符串 #}
{% if message %}{{ message }}{% endif %}{% endblock %}

**6)登录页面 login.html **
{% extends 'base.html' %}{% block title %} 登录页面 {% endblock %}{% block content %}登录没有帐号?注册
{% if message %}{{ message }}{% endif %}{% endblock %}

7)用户信息显示页面 list.html
【Flask-bootstrappython16】{% extends 'base.html' %}{% block title %} 用户显示 {% endblock %}{% block content %}用户信息显示