Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0589
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在:
个人网站: `https://oeasy.org`
蓝桥云课: `https://www.lanqiao.cn/courses/3584`
GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次使用了数据库连接池
- 注册了之后
- 可以用用户名和密码进行登录吗?
<!DOCTYPE html>
<html>
<head>
<script>
function login(){
var f = document.getElementById("f");
var login = document.getElementById("login");
f.action = "/login";
f.submit();
}
</script>
</head>
<body>
<form action="/regist" method="POST" id="f">
username:<input name="username"/><br/>
password:<input name="password"/><br/>
<input type="submit" name="regist" value="regist">
<input onclick="login()" type="button" value="login">
</input>
<br/>
</form>
</body>
</html>- post请求到/login
- 但是没有相应的接收函数
from flask import Flask,render_template,request,redirect
import traceback
import psycopg
from db import pool
app = Flask("__name__")
@app.route('/')
def hello():
with pool.connection() as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM login;")
records = cur.fetchall()
cur.close()
conn.close()
return render_template("show_data.html", l = records)
@app.route("/regist", methods=['POST', 'GET'])
def regist():
username = request.form["username"]
password = request.form["password"]
print(username)
with pool.connection() as conn:
with conn.cursor() as cur:
try:
sql = "INSERT INTO login(username, password) VALUES(%s, %s)"""
t = (username,password)
cur.execute(sql,t)
conn.commit()
cur.close()
conn.close()
except Exception:
print(traceback.print_exc())
cur.close()
conn.close()
return username + " already exists"
else:
return redirect("/")
@app.route("/login", methods=['POST', 'GET'])
def login():
username = request.form["username"]
password = request.form["password"]
print(username)
with pool.connection() as conn:
with conn.cursor() as cur:
try:
sql = "SELECT * FROM login WHERE username=%s AND password=%s"
t = (username,password)
user = cur.execute(sql,t).fetchone()
print("sql===",sql,";",t)
cur.close()
conn.close()
return user + "is logon!"
except Exception:
print(traceback.print_exc())
cur.close()
conn.close()
return username + " already exists"
else:
return redirect("/")
if __name__ == "__main__":
app.run(debug=True)
- 错误来源于数据类型
- 输出user的类型type
- 确认类型为tuple
- 使用下标方式得到用户名
- 可以得到相应的sql语句吗?
- 输出sql语句、元组
- 将结果手工合成sql语句
- 并放到pg里面执行
from flask import Flask
from flask import render_template
from flask import request
from flask import redirect
from flask import url_for
import traceback
import psycopg
from db import pool
app = Flask("__name__")
@app.route('/')
def hello():
with pool.connection() as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM login;")
records = cur.fetchall()
return render_template("show_data.html", l = records)
@app.route("/regist", methods=['POST', 'GET'])
def regist():
username = request.form["username"]
password = request.form["password"]
print(username)
with pool.connection() as conn:
with conn.cursor() as cur:
try:
sql = "INSERT INTO login(username, password) VALUES(%s, %s)"""
t = (username,password)
cur.execute(sql,t)
conn.commit()
except Exception:
print(traceback.print_exc())
return username + " already exists"
else:
return redirect("/")
@app.route("/login", methods=['POST', 'GET'])
def login():
username = request.form["username"]
password = request.form["password"]
print(username)
with pool.connection() as conn:
with conn.cursor() as cur:
try:
sql = "SELECT * FROM login WHERE username=%s AND password=%s"
t = (username,password)
user = cur.execute(sql,t).fetchone()
print("sql===",sql,";",t)
return username + " is logon!"
except Exception:
print(traceback.print_exc())
return username + " cannot login"
else:
return redirect("/")
if __name__ == "__main__":
app.run(debug=True)
- 这次添加了 登录功能
- 通过查询数据库
- 确定用户名和密码
- 最终确认用户可以登陆
- 登陆之后
- 就只是登录而已
- 没有浏览器再访问服务器
- 还是无状态
- 还是从零开始
- 能否在他们两个之间建立联系呢?🤔
- 下次再说!
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。






