Flask无需指定路径即可访问login.html的原因及main.py代码含义求解
问题1:为何无需指定路径即可访问login.html
你当前是直接在本地通过浏览器打开login.html静态文件,此时浏览器走file://协议加载本地磁盘中的文件,完全不需要经过Flask服务处理,自然不需要在Flask代码中配置对应的访问路径、也不需要把文件放到Flask默认的templates模板目录。
你HTML中表单的action属性已经写死了提交地址为http://localhost:5000/login,所以只要你启动了Flask服务,点击本地打开的页面的提交按钮,就能正常把表单数据发送到Flask的对应接口。
如果你希望通过Flask服务托管这个页面,需要做两个修改:
- 把
login.html放到Flask项目根目录下的templates文件夹(没有就手动新建) - 在
main.py中新增对应GET请求的路由:
from flask import render_template @app.route('/login_page', methods = ['GET']) def login_page(): return render_template('login.html')
之后启动Flask服务,访问http://localhost:5000/login_page就能通过Flask服务加载到这个登录页面。
问题2:main.py代码逐行解释
@app.route('/login',methods = ['POST']):Flask的路由装饰器,作用是将URL路径/login和后续的login视图函数绑定,同时限定该路径仅接收POST类型的HTTP请求,其他类型的请求访问该路径会直接返回405方法不允许的错误。def login()::定义/login路径对应的视图函数,Flask收到符合要求的/login请求时,会自动执行该函数内的逻辑。uname=request.form['uname']:从POST请求携带的表单数据中,取出name属性为uname的输入框的值,赋值给uname变量,对应你HTML中用户名输入框的name="uname"配置。passwrd=request.form['pass']:同理从表单数据中取出name属性为pass的密码输入框的值,赋值给passwrd变量。if uname=="ayush" and passwrd=="google"::校验用户输入的账号密码是否匹配预设值ayush和google,两个条件同时满足才会执行后续的返回逻辑。return "Welcome %s" %uname:账号密码校验通过后,给前端返回拼接了用户名的欢迎文本。
内容的提问来源于stack exchange,提问作者Dheeraj-Tech
相关产品推荐
相关产品推荐

