第一步 新建工程cloudms
第二步 新建项目msgapp
第三步 在msgapp文件下新建文件夹templates,并在其中开发一个html文件MsgSingleWeb.html
<body>
<h1>提交留言功能区</h1>
<form action="/msggate/" method="post">
{% csrf_token %}
发送方 <input type="text" name="userA" /> <br>
接收方 <input type="text" name="userB" /> <br>
消息文 <input type="text" name="msg" /> <br>
<input type="submit" value="留言提交" />
</form>
<h1>获取留言功能区</h1>
<form action="/msggate/" method="get">
接收方 <input type="text" name="userC" /> <br>
<input type="submit" value="留言获取">
</form>
<table border="1">
<thead>
<th>留言时间</th>
<th>留言来源</th>
<th>留言信息</th>
</thead>
<br>
<tbody>
{% for line in data %}
<tr>
<td>{{ line.time }}</td>
<td align="center">{{ line.userA }}</td>
<td>{{ line.msg }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
解释一下关键代码
首先
{% csrf_token %}
在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服务器会验证这串字符来确保用户是在服务端返回的表单页面中提交的数据,防止有人通过例如jquery脚本向某个url不断提交数据,是一种数据提交的验证机制。
<form action="/msggate/" method="post">
即该表格的功能是是向url为/msggate/的链接提交内容。
<form action="/msggate/" method="get">
即该表格的功能是是从url为/msggate/的链接获取内容。
<tbody>
{% for line in data %}
<tr>
<td>{{ line.time }}</td>
<td align="center">{{ line.userA }}</td>
<td>{{ line.msg }}</td>
</tr>
{% endfor %}
</tbody>
这里并不是纯正的html语言,而是django的模板语言。这段代码的功能是动态生成表格。
第四步 在cloudms路径中的settings.py文件中,做如下修改
'DIRS': [os.path.join(BASE_DIR), 'msgapp/templates'],
第五步 在msgapp路径中,新建urls.py文件,建立本地路由
from django.urls import path
from . import views
urlpatterns = [
path('', views.msgproc),
]
第六步 在cloudms路径urls.py文件中修改全局路由
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('msggate/', include('msgapp.urls')),
path('admin/', admin.site.urls),
]
第七步 修改msgapp下的views.py代码,编写交互处理逻辑
from django.shortcuts import render
from datetime import datetime
# Create your views here.
def msgproc(request):
datalist = []
if request.method == "POST":
userA = request.POST.get("userA", None)
userB = request.POST.get("userB", None)
msg = request.POST.get("msg", None)
time = datetime.now()
with open('msgdata.txt', 'a+') as f:
f.write("{}--{}--{}--{}--n".format(userB, userA,
msg, time.strftime("%Y-%m-%d %H:%M:%S")))
if request.method == "GET":
userC = request.GET.get("userC", None)
if userC != None:
with open("msgdata.txt", "r") as f:
cnt = 0
for line in f:
linedata = line.split('--')
if linedata[0] == userC:
cnt = cnt + 1
d = {"userA":linedata[1], "msg":linedata[2]
, "time":linedata[3]}
datalist.append(d)
if cnt >= 10:
break
return render(request, "MsgSingleWeb.html", {"data":datalist})
这段代码的逻辑很简单。解析传进来的request请求,如果是post就往txt中写文件,如果是get就打开txt文件读取内容,然后返回到网页中。
render函数有三个参数,依次是request请求,html页面,以及可以向html页面中特定变量赋值的映射字典。
之前的html页面中有个data变量,与其对应起来。
第八步 启动项目