flask框架应用(一)

架构简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
Framework即架构,它是一个语言开发软件,提供了软件开发的框架,使开发更具工程性、简便性和稳定性。

在这里插入图片描述

什么是Flask?

Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序
可以是一些Web页面,博客, wiki ,基于 Web 的日历应用或商业网站。
Flask依赖模块:
web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI
(1).Werkzeug 一个WSGI工具包, 是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的借口,其他语言也有类似的接口)
(2).jinja2模板引擎

Flask的优势

Flask属于微框架( micro-framework )这一类别,微架构通常是很小的不依赖外部库的框架.
框架很轻量
更新时依赖小
专注于安全方面的bug

flask的post请求

写了一个简单的登录网页测试post请求传递到后台处理。
代码实现:

"""
Date: 2019--28 10:44
User: yz
Email: 1147570523@qq.com
Desc:
"""
from flask import Flask, request, render_template, redirect, abort

app = Flask(__name__)

@app.route('/')
def index():
    return '这是主页'

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if username == 'root' and password == 'redhat':
            return redirect('/')
        else:
            return render_template('login_post.html', errMessages='用户或密码错误!')
    else:
        return render_template('login_post.html')

@app.errorhandler(404)
def page_not_fount(e):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'), 500

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

在这里插入图片描述
登录后跳转主页。
在这里插入图片描述
“”"

Jinja2

1. 什么是Jinja2模板引擎?(官方网址: http://docs.jinkan.org/docs/jinja2/)

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:
1). python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html件)分开的, 使得代码的可读性增强, 代码容易理解和维护;
2). 模板渲染: 在html文件中,通过动态赋值 ,将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。
3). 其他的模板引擎: Mako, Template, Jinja2

2. 语法
1). Jinja2变量显示语法: {{ 变量名 }}
    完整的过滤器查看位置: http://jinja.pocoo.org/docs/templates/#builtin-filters
2). Jinja2变量内置过滤器:
        safe            渲染值时不转义
        capitalize      把值的首字母转换成大写,其他字母转换成小写
        lower           把值转换成小写形式
        upper           把值转换成大写形式
        title           把值中每个单词的首字母都转换成大写
        trim            把值的首尾空格去掉
        striptags       渲染之前把值中所有的 HTML 标签都删掉
3). 如何自定义过滤器?
4). for循环:
    {% for i in li%}
        xxx
    {% endfor %}
5). if语句
    {% if user == 'westos'%}
        xxxx
    {% elif user == 'hello' %}
        xxx
    {% else %}
        xxx
    {% endif%}
3.宏的操作====相当于函数
1).  如何定义宏?
    <!--相当于python里面的定义函数, 后面使用的场景: 分页显示-->
    {%  macro render(id) %}
        <h1>hello world {{ id }}</h1>
    {% endmacro %}

2). 如何调用宏?
<!--调用定义好的宏(类似于python中的函数)-->
{{ render(1) }}
{{ render(2) }}
{{ render(3) }}
4. include包含操作
如何使用: {% include  "06_inclued.html"%}
5. 模板的继承: 一般网站的导航栏和底部不会变化, 为了避免重复编写导航栏信息;
1). 如何定义模板?
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>{% block title %}  {% endblock %}</title>
        </head>
        <body>
        <div style="width: 100px; height: 200px" > 这是导航栏</div>
        {% block body %}
        hello
        {% endblock %}
        <div style="width: 100px; height: 200px" >这是底部</div>
        </body>
        </html>
2). 如何继承基模板?
        {% extends  '06_base.html'%}
        {% block title %}
            继承案例
        {% endblock %}
        {% block body %}
        <span style="color: green">这是最新填的block内容</span>
        {% endblock %}
案例

做一个可以注册登录注销功能的页面。请求成功会有消息闪现。

代码实现:

"""
Date: 2019--28 13:35
User: yz
Email: 1147570523@qq.com
Desc:
"""
from flask import Flask, request, render_template, redirect, session, flash, make_response

app = Flask(__name__)
app.config['SECRET_KEY']='westos'

users = [
    {
        'username': 'root',
        'password': 'redhat'
    }
]
@app.route('/')
def hello_world():
    return render_template('index.html')

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        username = request.form.get('username').strip()
        password = request.form.get('password').strip()
        for user in users:
            if user['username'] == username and user['password'] == password:
                session['username'] = username
                flash('登录成功')
                resp = make_response(render_template('index.html', name=username))
                resp.set_cookie('username', username)
                return redirect('/')
        else:
            flash('登录失败')
            return render_template('login.html', errMessages='login fail')

@app.route('/logout/')
def logout():
    session.pop('username')
    flash("注销成功")
    return redirect('/login/')

@app.route('/register/',methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    else:
        username=request.form.get('username')
        password=request.form.get('password')
        for user in users:
            if user['username']==username:
                flash('注册失败:用户名冲突')
                return redirect('/register/')
        else:
            users.append(dict(username=username,password=password))
            flash('注册成功,请登录')
            return redirect('/login/')

@app.route('/list/<int:page>/')
def list():
    return render_template('list.html',users=users)

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

没有登录的时候直接访问主页会显示登录按钮。
在这里插入图片描述
登录页面效果展示:
在这里插入图片描述
没有账户密码的可以点击注册跳转页面。如有账户则立即登录跳转登录界面。
在这里插入图片描述
登录成功后跳转主页。并且获取当前用户的用户名并且显示。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值