Flask:
flask是一个微框架,主要面向需求简单的小应用,是基于Werkzeug,Jinja 2 的Python微架构(微框架 的核心意图是将Web工程项目的核心部分进行高度集中并且尽量简单,从而在整个Web工程中形成一个独立的部分,同时其余部分可以根据我们的需求任意扩展)。
简单的代码实例;
from flask import Flask
#创建Flask的实例
app = Flask(__name__)
@app.route("/") #URL路由,将url与服务器绑定
def hello ( ):
return "Hello World!"
常用的配置方法;
1. 脚本直接写入`
app.config['SECRET_KEY'] = 'some strange words' # 设置全局属性参数语法
2. 配置单独文件;(同3)
简单来说就是脚本太多了,放在主题代码里面不够美观简练,因此要单独建立文件,然后引入。
3. 不同配置类:
大型项目需要多个配置组合,比如开发时的配置,测试的配置,部署的配置……这样我们需要在配置文件里创建不同的配置类,然后在创建程序实例时引入相应的配置类。最佳实践是创建一个存储通用配置的基类,然后为不同的使用使用场景创建新的继承基类的配置类。
(最后引入这个文件然后调用相关的类就可以了)
class Debugconfig():
DEBUG = True
SECRET_KEY = 'BBBBBBBBB'
PAGE_SIZE = 10
class Developconfig():
DEBUG = True
SECRET_KEY = 'BBBBBBBBB'
PAGE_SIZE = 10
class Testconfig():
DEBUG = True
SECRET_KEY = 'BBBBBBBBB'
PAGE_SIZE = 10
在Flask框架中使用route()装饰器将一个URLs地址与请求处理函数绑定。
@app.route('/login.do',methods=['POST','GET']) # 设置请求地址携带参数,不写method默认只接受GET方法
在Falsk中对静态文件的处理;
- 静态网页(模板)的创建需要在工程文件夹中创建 templates 子文件夹,今后所有的html网页都放在该文件夹中;
- 样式表、图片等静态资源的创建需要在工程文件夹中创建 static 子文件夹,今后所有的静态文件都放在该文件夹中。
html静态页面应用外部CSS样式表的两种方式:
<!--绝对路径,不容易丢失样式。-->
<link rel="stylesheet" href=" {{ url_for('static', filename='css/style.css', _external=True) }} "/>
<!--相对路径,简单容易。-->
<link rel="stylesheet" href="static/css/style.css" />
- _external=True 参数为可选参数,其作用是引用方式的不同:
_external 参数为True,引用地址为:http://localhost:5000/static/css/style.css
_exernal 参数为False,引用地址为:/css/style.css (不使用该参数,默认为False)
模板中的表达式:
在Flask框架模板(即工程中的HTML页面)中,可以使用 {{ variable }} 双括号输出动态变量值。
变量可以是网页内临时声明的变量,更多情况下是传递到页面的参数变量(字符串、数字、字典等等)
<!-- 输出name的值 -->
<h1>你好 {{ name }}</h1>
同意可以使用{% 结构化表达式 %} 表示各结构化语句(判断、循环等)
<!-- 判断 -->
{% if 表达式 %}
……
<!-- 否则 -->
{% else %}
……
<!-- 结束判断 -->
{% endif %}
1. 创建Flask项目:
创建成功之后会如下图所示:
2. 建立相应的文件(html文件,style.css等):
datashow.py代码:
import config #引入config文件
from config_class import * #不同配置类
from flask import Flask,render_template,request,Response,session
# Flask类的实例
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'BBBBBBBBB'
#使用config文件
app.config.from_object(config)
#使用config类
app.config.from_object(Debugconfig)
@app.route('/') # URL路由 将url与服务器绑定
def index():
return render_template('index.html')
@app.route('/login.do',methods=['POST','GET'])
def login():
#表单提交的数据用request.form
username = request.form.get('userName')
userpwd = request.form.get('userPwd')
if username == 'zhangsan' and userpwd =='123456':
session['user'] = 'zhangsan'
return render_template('index.html')
elif username != None and (username == 'zhangsan' and userpwd !='123456'):
return render_template('login.html',message='用户名或者密码错误')
return render_template('login.html')
if __name__ == '__main__':
app.run(host='10.0.14.216',port=8080, debug=True)
index.html文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
</script>
<style type="text/css">
a{
margin-right: 12px;
}
</style>
</head>
<body style="min-width:1200px;padding: 0px;margin: 0;background-color: lavenderblush;">
<div id="header" style="...">
<div style="width: 90%;border: solid 0px red;margin-left: 5%;padding: 6px" align="left">
<div style="border: solid 0px red;padding: 0px;float:left"></div>
<div style="border: solid 0px red;padding: 0px;float:right">
<a href="/login.do">
{% if session.get('user') == None %}
登陆
{% else %}
{{session.get('user')}}
{% endif %}
</a>
</div>
</div>
</div>
<div id='main' style="width: 90%;border: solid 0px red;margin-left: 5%;" align="center">
<div id='left' style="min-height:800px;background-color: white;width: 14%;float:left;border: solid 0px red;margin: 4px;">
<ul>
<li><a href="table_lianliankan.html" target="innerFrame">人工智能</a></li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
<li>人工智能</li>
</ul>
</div>
<div id='middle' style="min-height:800px;background-color: white;width: 60%;float:left;border: solid 0px red;margin: 4px;">
<div style="width: 100%;">
a
<!--
<iframe border="0" scrolling="no" width="100%" height="800px" name="innerFrame" src="html_form.html"></iframe>
-->
</div>
</div>
<div id='right' style="min-height:800px;background-color: white;width: 24%;float:right;border: solid 0px red;margin: 4px;">
<div style="width: 100%;">aaaa</div>
</div>
</div>
<div style="background-color: #FF0000;position: fixed;left: 8px;top:200px;height: 400px;">
左广告
</div>
<div style="background-color: #FF0000;position: fixed;right: 8px;top:200px;height: 400px;">
右广告
</div>
</body>
</html>
login.html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--<link rel="stylesheet" href="static/css/style.css" />-->
<link rel="stylesheet" href="{{url_for('static',filename='css/style.css',_external=True)}}" />
</head>
<body>
<form action="/login.do" method="post">
<table>
<span color="red"> {{message}}</span>
<tr>
<td>用户名:</td><td><input type="text" name="userName" /></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="userPwd" /></td>
</tr>
<tr>
<td>
<input type="reset" value="重置" />
<input type="submit" value="提交" />
</td>
</tr>
</table>
</form>
</body>
</html>
style.css代码:
(部分代码是无效的,因为这是以前使用过的css,所以为了简便就直接复制过来了。)
@charset "utf-8";
body{
text-align: center;
}
div{
/*background-color: darkgrey !important;
background-color: #2E8B57 !important;*/
}
table{
BACKGROUND-COLOR: seagreen;
font-family: "楷体";
font-size: 50px;
width: 400px;
}
TABLE{
background-color: #FF00FF;
}
#P1{
background-color: ghostwhite;
}
#p1{
background-color: lightgreen;
}
.C1{
background-color: #FF00FF;
}
.C2{
font-family: "mv boli";
font-size: 20px;
}
h1,h2,h3,h4,h5{
color: #2E8B57;
}
ul li .name2{
}
a:visited{
color: white;
}
a:hover{
color:white;
}
运行效果图:
登陆页面:
登陆成功:
登陆失败: