from flask import Flask,render_template,request,redirect,session,url_for
app = Flask(__name__)
USER = {
1:{'name':'wdc','age':18,'text':'我的名字叫做王德昌'},
2:{'name':'wdw','age':16,'text':'我的名字叫做王德武'},
3:{'name':'pjj','age':19,'text':'我的名字叫做潘军军'}
}
#用来查看是否有用户登录,用session这个全局变量来保存
session = {}
@app.route('/',methods = ['GET','POST']) #每一次将主页设置为‘/’,要修改请求方式,因为在/login的url中要输入东西
@app.route('/login',methods = ['GET','POST'],endpoint='l1') #endpoint是一个反向输出
def login():
if request.method == 'GET':
return render_template('login.html')
else:
user = request.form.get('user')
pwd = request.form.get('pwd')
if user == 'wdc' and pwd == '123':
#登录成功后用session来保存这个用户信息
session['user_info'] = user
return redirect('http://www.baidu.com')
return render_template('login.html',error = "用户名或密码错误")
@app.route('/index',methods=['GET'])
def index():
url_1 = url_for('l1')
user = session.get('user_info')
if user:
return render_template('index.html',user_dict = USER)
return redirect(url_1)
@app.route('/detail/<int:nid>',methods = ['GET'])
def detail(nid):
url_1 = url_for('l1')
user = session.get('user_info')
if user:
info = USER.get(nid)
return render_template('detail.html',info = info)
return redirect(url_1)
app.run(debug=True)
根据代码来分析以及整理下思路:
这是一个很简单的flask的简单web应用
那么现在就来分析下我对这个简单应用的理解以及思路
知识点:
/login中的知识点
1.首先从创建/login这个url开始,从这个url中我们可以看到俩种常见的请求方法methods = ['GET','POST']
当用户没有在网页中提交数据的时候,网页默认使用的是GET的请求方法,当网页有提交的数据的时候,我们要改用POST方法
2.利用常见的render_template() 和 redirect() 以及request
render_templat的作用是返回一个html页面,并且在后面的参数是给html中的页面提供参数
redirect的作用是用来跳转网页
request可以让用户找到请求的信息,比如本例中的request.methods 可以获取到页面中的请求方法
/index中的知识点
1.在本例中/index是用来返回用户数据的信息,所以直接使用render_template来返回指定的html页面,使用USER给html中的页面获取哦参数,从而使在html中可以获取到用户的信息
在index.html其实才是这个url的重点所在
<body>
<h1>用户列表</h1>
<table>
{%for k,v in user_dict.items()%}
<tr>
<td>{{k}}</td>
<td>{{v['name']}}</td>
<td><a href="/detail/{{k}}">查看详细</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
2.使用字典的取键值的方法来获取USER中的信息,并且设置新的url跳转到详细信息中
/detail/<int>中的重点是:
info = USER.get(nid)
return render_template('detail.html',info = info)
获取url中的信息,并且通过这个信息获取USER中的信息
<body>
<h1>详细信息</h1>
<div>{{info['text']}}</div>
</body>
获取USER中的详细信息。
然后从全局代码出发,可以看到session的作用是用来临时存储用户的
如果没有成功的存取,或者是存取失败的那么都将会跳回到/login进行用户认证,认证成功后才可以进入别的url访问资源
小的知识点:
endpoint:指代url的别名
url_for:将指代的别名赋给一个新的变量,那么这个变量就代表了别名前指代的url
index.html的源码
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post">
<input type="text" name="user">
<input type="text" name="pwd">
<input type="submit" value="登录" >{{error}}
</form>
</body>
</html>
login.html的源码
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table>
{%for k,v in user_dict.items()%}
<tr>
<td>{{k}}</td>
<td>{{v['name']}}</td>
<td><a href="/detail/{{k}}">查看详细</a></td>
</tr>
{% endfor %}
</table>
</body>
</html>
detail.html的源码
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>详细信息</h1>
<div>{{info['text']}}</div>
</body>
</html>
浙公网安备 33010602011771号