引入时间

我们聊天的时候,除了内容,时间也是很关键的信息。

那么此时需要使用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