网站首页 > 技术文章 正文
登录场景
在现在这个社会,我们手机上的很多应用,比如淘宝,京东,微信,QQ等等,都有登录功能的。而且只有登录之后好多功能才能使用,比如购物或者聊天之类的。那登录的过程是怎样的呢?
登录过程分析
首先,我们从一开始说起,我们需要访问到登录页。当我们在浏览器输入网址http://127.0.0.1:8000/user/login的时候,会显示我们的登录页面。
那在登录页面,当我们输入用户名密码点击登录按钮之后,会发生什么呢?当点击登录按钮之后,我们输入的用户名和密码就会传递到服务器,这时我们需要先查询这个用户名到底是不是有效的,也就是说,这个用户有没有注册过,当我们查询了所有已经注册的数据,发现这个用户名根本不存在,那么我们会提示 用户名不存在,那如果我们发现这个用户名是对的,接下来要做的,就是验证输入的密码对不对,验证的方式就是用现在输入的密码,与之前保存在这里的密码对比,如果一样,就是对的,如果不一样,那就是错的了。当密码不正确的时候,我们会给出提示:密码错误,请重试。如果用户名和密码都正确呢?就是登录成功的状态了,就可以直接跳转到主页,继续浏览更多的内容了。
访问登录页
@app.route('/user/login', methods=['GET'])
def login():
# 返回首页index.html
return render_template('index.html')
查找用户名
def find(username):
'''
根据用户名查找是否已经注册,如果是,返回用户的全部信息,如果不是,返回None
'''
for user in users:
if user['username'] == username:
return user
return None
登录核心代码实现
@app.route('/user/login_data', methods=['GET'])
def login2():
username = request.args.get('username')
password = request.args.get('password')
user = find(username)
if user is None:
return render_template('index.html', username=username, user_msg='用户名不存在')
elif user['password'] != password:
return render_template('index.html', username=username, pass_msg='密码错误,请重试')
else:
return "登录成功"
查询路由信息
- 在程序中获取
- 在应用中的url_map属性中保存着整个Flask应用的路由映射信息,可以通过读取这个属性获取路由信息
- print(app.url_map)
- 如果想在程序中遍历路由信息,可以采用如下方式
- for rule in app.url_map.iter_rules(): print(rule.endpoint, rule.rule)
以json的方式返回应用内的所有路由信息
@app.route('/')
@app.route('/index')
@app.route('/home')
def home():
rules_ierator = app.url_map.iter_rules()
return json.dumps({rule.endpoint: rule.rule for rule in rules_ierator})
POST请求
我们已经知道,在网络传输的过程中,客户端向服务端传递的信息,称为请求。请求有很多种方式,常用的方式有两种,一种是get,一种是post。在上一阶段的学习中,我们已经学过了表单,表单就是用来将数据打包,发送给服务器的工具。不同的请求发送数据有什么样的区别呢?get请求就像公开谈论,传递的信息是公开的,而post则像是传纸条,内容是私密的。
那么post请求具体是什么样子呢?有哪些应用场景呢?
当我们填写了一个表单,并规定了表单以post的方式进行提交,表单中的数据就被打包,通过请求体发送到服务器,而服务器接收到之后,也需要按照post的方式来处理这个请求。
表单一般会有哪些信息呢?用户名……密码……邮箱……等等很多很多信息。
模板设置
<div class="loginBox">
<!--在下方写你的代码:设置form表单发送post请求方式-->
<form action="/login" method="post">
<!--在下方写你的代码:设置input标签的name属性值-->
<input class="username" type="text" placeholder="账号" name="username">
<input class="password" type="password" placeholder="密码" name="password">
<input class="submit" type="submit" value="登 录">
</form>
</div>
后端发送接收post请求参数
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
print(username, password)
return '<h1>欢迎您,%s</h1>' % username
云相册项目
首先有注册功能,可以访问注册页去注册用户。注册成功后,就可以跳转到登录页,在登录页要完成登录的功能。当登录成功之后呢?就可以显示首页了。
实现流程
接着分析一下首页实现流程,在浏览器输入 127.0.0.1:8000的时候,就会向服务器发送请求,服务器接收到请求之后,会处理请求,请求完成后会返回响应。然后浏览器收到响应信息之后就会把首页显示在页面上了。
# 在下方写你的代码:设置路由,返回首页
@app.route('/')
def home():
# 把图片数据photos以模板变量的方式传递到前端
return render_template('index.html', photos=photos)
# 在下方写你的代码:设置路由,返回登录页面
@app.route('/login', methods=['GET'])
def user_login():
return render_template('login.html')
登录流程
在登录页输入用户名密码,点击登录按钮之后,会向服务器发送请求,服务器接收到输入的用户名和密码之后,会查找用户名,当查到不到的时候,会提示:“用户名不存在”。如果用户名存在,接下来就验证密码是否正确。当密码不正确的时候,提示“密码错误请重试”,如果用户名存在,并且密码也正确的话,就重定向到首页。
设置登录路由,获取用户名密码
在 project.py 中完成定义路由实现登录功能:登录路由为 '/login',请求方式为POST请求,视图函数名称为login,在函数中完成获取用户名和密码,查找用户的功能。给出了提示信息,同学们先独立尝试完成代码。
@app.route('/register', methods=['GET'])
def user_register():
"""
注册路由,返回注册页面
"""
return render_template('register.html')
# 在下方写你的代码:设置注册路由,接收post请求,获取注册信息用户名和密码
@app.route('/register', methods=['POST'])
def register():
username = request.form.get('username')
password = request.form.get('password')
user = find(username)
# 如果用户已存在
if user is not None:
return render_template('register.html', msg='该用户已被注册')
# 构建用户信息,存储到用户列表users中
user = {'username': username, 'password': password}
users.append(user)
return redirect('login')
环境变量加载配置文件
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
app.config.from_envvar('环境变量名')
关于silent的说明:
表示系统环境变量中没有设置相应值时是否抛出异常
- False 表示不安静的处理,没有值时报错通知,默认为False
- True 表示安静的处理,即时没有值也让Flask正常的运行下去
相关推荐
猜你喜欢
- 2024-10-15 Python Flask Web表单(flask form表单)
- 2024-10-15 如何在Flask应用程序中使用JSON Web Tokens进行安全认证
- 2024-10-15 综合指南:将 Flask 与 MongoDB 结合使用
- 2024-10-15 python-flask搭建平台,HTML+CSS+JS写前端的web全栈-动画轮播
- 2024-10-15 Flask 表单处理(flask formdata)
- 2024-10-15 三、flask博客项目实战-之表单(flask 表单)
- 2024-10-15 flask python web开发的简单易学框架
- 2024-10-15 Flask-APScheduler使用教程(flask apscheduler)
- 2024-10-15 flask 项目中使用 bootstrapFileInput(进阶篇)
- 2024-10-15 基于flask框架展示数据可视化的一次尝试
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)