Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0591
- 这是 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`
---- 上次研究了cookie
- 小甜点
- 真的很好吃
- 这样可以往浏览器里面写一些东西
- 告诉浏览器浏览器我是谁
- 比如正确登录之后的用户名
- 这个东西怎么存呢?
-
直接写cookie太不安全了
- 常见的方式是session
-
session 就是 会话
- 可以 在登陆成功的 时候
- 设置session
from flask import Flask,render_template,request,redirect,session
import traceback
import psycopg
from db import pool
app = Flask("__name__")
app.secret_key = b'_5#y2L"Fdfq/SDFGBDGSDGWERVC#@#%'
@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)
print(type(user))
session["current_user"] = user
cur.close()
conn.close()
return user[0] + " 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)
- 总共有三处改动
- 改了之后有什么效果呢?
- 他的名称叫做一个session
- 他本质上是一个cookie
- 可以在其他页面通过session得到用户名吗?
- 通过session得到current_user
- 可以把登录状态展示在网页上吗?
- 网页模板也需要修改
<!doctype html>
<title>Hello from Flask</title>
{{username}} logon!<br>
{% for name in l %}
<h1>Hello {{ current_user }}!</h1>
{% endfor %}
- 最终效果
- 这样就得到了
- 登录后的session信息
- 如何理解session呢?
from flask import Flask,render_template,request,redirect,session
import traceback
import psycopg
from db import pool
app = Flask("__name__")
app.secret_key = b'_5#y2L"Fdfq/SDFGBDGSDGWERVC#@#%'
@app.route('/')
def hello():
current_user = session.get("current_user")
print("current user:",current_user)
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,current_user = current_user)
@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)
print(type(user))
session["current_user"] = str(user[0])
cur.close()
conn.close()
except Exception:
print(traceback.print_exc())
cur.close()
conn.close()
return username + " already exists"
else:
return redirect("/")
if __name__ == "__main__":
app.run(debug=True)
<!doctype html>
<title>Hello from Flask</title>
{{ current_user}} is logon!
{% for name in l %}
<h1>Hello {{ name }}!</h1>
{% endfor %}
- 会话
- 指的是浏览器和服务器之间的会话
- 这个session可以保持多久的时间呢?
- 这次 研究了 会话(session)
- 登陆之后
- 在 服务器和浏览器之间
- 添加了 一个 session
- session本质上 是 根据secret设置的cookie
- session 会在多长时间 断开呢?
- 下次再说!
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。







