文章目录
- 一、背景
- 二、雇主的期望
- 2.1、jinja2代码
- 三、题主的期望
- 3.1、删除功能
- 3.2、前端体现
- 3.3、留言列表实现降序
- 3.4、效果显示
- 四、总结
一、背景
上周某鱼推送过来的单子多到题主应接不暇,不得已拒绝了几单,但是接下来的单子呢又不那么顺利,比如说要考试的那个,题主还特意问了是测试还是运维,雇主很肯定的说是测试,结果呢,是地地道道的自动化运维,逗题主呢,虽然题主测试、开发、运维都有涉猎,但是不代表是万能的,所谓是术业有专攻,测试是本职,开发和运维只是附带的技能;还有一个是说要给开发一个留言模块,这不就来叙事了,只不过人家丢过一个连接就消失了,不再需要题主给他实现了。
二、雇主的期望
雇主找过来的连接题主就不贴出来了,但是效果还是可以贴出来‘观赏’一下
这对于雇主来说已经满足需求了,但是题主的要求高一些,这里的样式是经过调整的,比如文本框里的内容、表单的样式<之前是会变形的>;同时题主发现了它的留言数据是写入text的,也就是读取text文本,这对于开发来讲是不可容忍的。
2.1、jinja2代码
<h1>提交留言功能区</h1>
<form action="/msggate/" method="post">
{% csrf_token %}
<div>
<span>发送方: </span><input type="text" name="userA" value="请输入发送者信息" onfocus="if(value=='请输入发送者信息')value=''" /> </div><br>
<div><span>接收方: </span><input type="text" name="userB" value="请输入接收者信息" onfocus="if(value=='请输入接收者信息')value=''"/> </div><br>
<div><span>消息文: </span><input type="text" name="msg" value="请输入即将发送的信息" onfocus="if(value=='请输入即将发送的信息')value=''"/> </div><br>
<input type="submit" value="留言提交" />
</form>
<h1>获取留言功能区</h1>
<form action="/msggate/" method="get">
<span>接收方: </span><input type="text" name="userC" value="请输入接收方名字" onfocus="if(value=='请输入接收方名字')value=''"/>
<input type="submit" value="留言获取">
</form>
三、题主的期望
看到如此简单丑陋的、题主都不好意思收费了,所以这一单就丢了;既然有需求,就不能放过,那么题主就自己找模板,轻车熟路的就找了;感觉还不赖的样子
从样式上看,后者明显更胜一筹,为此题主在原有的功能基础上了,增加了最下面的留言列表,以及删除留言功能
3.1、删除功能
记得在view模块中添加删除方法;因为原项目的关系,最后需要返回到上层目录
def delete(request):
email = request.GET.get("email")
Message.objects.filter(email=email).delete()
return redirect("../")
再去urls添加对应路由
path(r'message_form/delete/', delete),
3.2、前端体现
在遍历接口返回的表单中,添加删除入口
<table border="1">
<thead>
<th>留言邮箱</th>
<th>留言来源</th>
<th>留言信息</th>
<th>操作</th>
</thead>
<br>
<tbody>
{% for msg in message %}
<tr>
<td>{{ msg.email }}</td>
<td align="center">{{ msg.name }}</td>
<td>{{ msg.message }}</td>
<td><a href="delete/?email={{ msg.email }}">删除</a></td>
</tr>
{% endfor %}
</tbody>
</table>
3.3、留言列表实现降序
models模块,数据模型添加时间字段
update_time = models.DateTimeField(verbose_name="更新时间", auto_now=True)
同样是在view修改接口函数
# 默认接受一个参数request,是Django传递进来的,每一个请求都会包装成一个request对象
def message_form(request):
# 从html中提取数据保存到数据库中
# 如果是POST,进行取数据
if request.method == "POST":
# 进行值的提取
# POS属性调用get方法,可理解为dict字典所有用get方法,""代表值不存在的话设置默认值
name = request.POST.get("name", "")
email = request.POST.get("email", "")
address = request.POST.get("address", "")
message_text = request.POST.get("message", "")
update_time = request.POST.get("update_time", "")
message = Message()
# 和上面对应
message.name = name
message.email = email
message.address = address
message.message = message_text
message.update_time = update_time
message.save()
mes_list = []
all_message = Message.objects.all().values().order_by("-update_time")
if len(all_message) > 1:
for message in all_message:
mes_list.append(message)
else:
mes_list.append(message)
return render(request, "message_form.html", {
"message": mes_list
})
# 从服务器中提取出数据展示到html页面
if request.method == "GET":
var_dict = {}
# 这里取数据使用filter方法,如果没有数据会返回一个空的list: 根据update_time排序
all_message = Message.objects.all().values().order_by("-update_time")
if all_message: # 判断是否有数据,若没有数据取第0个会报错
mes_list = []
for message in all_message:
mes_list.append(message)
return render(request, "message_form.html", {"message": mes_list})
# 或者可以直接写为:locals(),可以将所有的局部变量全部变成key-value的形式,但此习惯不好
# return render(request, "message_form.html", locals())
else: # 若没有数据直接返回页面,不然会抛异常
return render(request, "message_form.html")
3.4、效果显示
如果只是更改view层、由于settings设置了DEBUG=True,那么程序会自动完成更新,但修改了数据模型,则需要重新迁移数据结构
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
四、总结
经过题主一番查找,然后再改造功能之后,是不是更能满足需求呢?兼职是做什么,已经没有那么多的时间和精力去开发一个完整的项目,所以只能接一些像bug修复、接口开发、项目部署、测试、自动化测试等等,好在面广,遇上高峰咨询的也是络绎不绝,共勉!