引入时间
我们聊天的时候,除了内容,时间也是很关键的信息。
那么此时需要使用datetime
库来记录每一条消息的发出时间。
from datetime import datetime
from flask import Flask, redirect
app = Flask(__name__)
messages = [] # 保存聊天信息
def add_messages(username, message):
# 添加消息,保存在列表里面
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 记录时间:格式:00:00:00
messages.append("({}) {}: {}".format(now, username, message))
引入网页渲染模板
在文件夹中添加templates
文件夹,里面添加一个网页文档index1.html
<html>
<head>
<title>首页</title>
</head>
<body>
<p>发送信息格式: /名字/消息内容 </p>
</body>
</html>
完整代码
from datetime import datetime
from flask import Flask, redirect, render_template
app = Flask(__name__)
messages = [] # 保存聊天信息
def add_messages(username, message):
# 添加消息,保存在列表里面
now = datetime.now().strftime("%H:%M:%S") # 记录时间:格式:00:00:00
messages.append("({}) {}: {}".format(now, username, message))
def get_all_messages():
"""获取关于我的所有聊天信息`"""
return "<br>".join(messages)
@app.route("/")
def index():
"""主页"""
return render_template("index1.html") # 加载我们的网页文档
@app.route("/<username>")
def user(username):
"""显示所有消息"""
return "<h1>欢迎, {0}</h1>{1}".format(username, get_all_messages())
@app.route("/<username>/<message>")
def send_message(username, message):
"""
通过路由设置:/人名称/信息内容 来实现发送信息给某人
添加信息到列表里面,然后返回到用户页面
"""
add_messages(username, message)
return redirect("/" + username)
app.run() # 启动服务器
让浏览器记住用户
需要引入Session
机制, 那么什么是Session
?
解释session:
当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session.
简单来说:session就是服务器里面的一块内存,内存里面能放任何东西,只要是名值对就可以了,类似Python里面的字典
主页逻辑
当用户第一次浏览网站的时候,Session
中没有用户,
那么我们就给一个表单,让用户填写用户名然后用post
提交数据,然后把用户信息放到Session
,
然后下次打开网页就不需要登记用户名,服务器已经知道你是谁了。
动态网站基本成型
from datetime import datetime
from flask import Flask, redirect, render_template, request, session
app = Flask(__name__)
app.secret_key = "randomstring12345" # 大家可以不一样的,用于生成随机ID的随机种子,类似random的seed
messages = []
def add_messages(username, message):
# 添加消息,保存在列表里面
now = datetime.now().strftime("%H:%M:%S") # 记录时间:格式:00:00:00
messages.append("({}) {}: {}".format(now, username, message))
def get_all_messages():
"""获取关于我的所有聊天信息`"""
return "<br>".join(messages)
@app.route("/", methods=["GET", "POST"]) # 允许的方法有POST和GET,其他不写methods默认就是GET
def index():
"""主页"""
if request.method == "POST":
# 如果是POST请求,进入这里,在请求中把username放到session里面
session["username"] = request.form["username"]
if "username" in session:
# 如果session中有username这个键值,就转跳到对应的用户页面
return redirect(session["username"])
# 如果没有,就展示首页网页。
return render_template("index2.html")
@app.route("/<username>")
def user(username):
"""显示所有消息"""
return "<h1>欢迎, {0}</h1>{1}".format(username, get_all_messages())
@app.route("/<username>/<message>")
def send_message(username, message):
"""
通过路由设置:/人名称/信息内容 来实现发送信息给某人
添加信息到列表里面,然后返回到用户页面
"""
add_messages(username, message)
return redirect("/" + username)
app.run() # 启动服务器
补充知识
浏览器将GET和POST定义为:
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据。
学习参考链接:https://www.runoob.com/tags/html-httpmethods.html