Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
Framework即架构,它是一个语言开发软件,提供了软件开发的框架,使开发更具工程性、简便性和稳定性。
Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序
可以是一些Web页面,博客, wiki ,基于 Web 的日历应用或商业网站。
Flask依赖模块:
web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI
(1).Werkzeug 一个WSGI工具包, 是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的借口,其他语言也有类似的接口)
(2).jinja2模板引擎
Flask属于微框架( micro-framework )这一类别,微架构通常是很小的不依赖外部库的框架.
框架很轻量
更新时依赖小
专注于安全方面的bug
写了一个简单的登录网页测试post请求传递到后台处理。
代码实现:
"""
Date: 2019--28 10:44
User: yz
Email: [email protected]
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 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:
1). python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html件)分开的, 使得代码的可读性增强, 代码容易理解和维护;
2). 模板渲染: 在html文件中,通过动态赋值 ,将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。
3). 其他的模板引擎: Mako, Template, Jinja2
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%}
1). 如何定义宏?
{% macro render(id) %}
hello world {{ id }}
{% endmacro %}
2). 如何调用宏?
{{ render(1) }}
{{ render(2) }}
{{ render(3) }}
如何使用: {% include "06_inclued.html"%}
1). 如何定义模板?
{% block title %} {% endblock %}
这是导航栏
{% block body %}
hello
{% endblock %}
这是底部
2). 如何继承基模板?
{% extends '06_base.html'%}
{% block title %}
继承案例
{% endblock %}
{% block body %}
这是最新填的block内容
{% endblock %}
做一个可以注册登录注销功能的页面。请求成功会有消息闪现。
代码实现:
"""
Date: 2019--28 13:35
User: yz
Email: [email protected]
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//')
def list():
return render_template('list.html',users=users)
if __name__ == '__main__':
app.run()
没有登录的时候直接访问主页会显示登录按钮。
登录页面效果展示:
没有账户密码的可以点击注册跳转页面。如有账户则立即登录跳转登录界面。
登录成功后跳转主页。并且获取当前用户的用户名并且显示。