某鱼兼职并不是那么好做,钱也不是漫天要价

news/2024/12/29 2:37:44/

文章目录

      • 一、背景
      • 二、雇主的期望
        • 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 = namemessage.email = emailmessage.address = addressmessage.message = message_textmessage.update_time = update_timemessage.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修复、接口开发、项目部署、测试、自动化测试等等,好在面广,遇上高峰咨询的也是络绎不绝,共勉!


http://www.ppmy.cn/news/6089.html

相关文章

InnoDB详解2

文章目录InnoDB详解21 行格式1 Compact行格式详解1 变长字段长度列表&#xff08;两个字节&#xff09;2 NULL值列表&#xff08;1个字节&#xff09;3 记录头信息 &#xff08;重点&#xff09;2 Dynamic行格式2 页的上层结构InnoDB详解2 1 行格式 规定每条记录是怎么存储的…

不同截止高度角BDS/GPS/Galileo单历元RTK定位性能分析

摘要 【目的】为探究北斗卫星导航系统(BeiDou Navigation Satellite System, BDS)、GPS(Global Positioning System)、Galileo单系统及组合系统在中国地区不同截止高度角下单历元双频RTK(Real-Time Kinematic)定位性能,对武汉境内一条短基线进行分析研究。【方法】采用双…

Linux tracepoint 简介

文章目录前言一、跟踪点的目的二、跟踪点的使用三、DECLARE_TRACE四、sched_switch例程五、TRACE_EVENT六、跟踪点的开销参考资料前言 跟踪点是放置在内核代码中较重要位置的硬编码检测点。例如&#xff0c;在系统调用、调度程序事件、文件系统操作和磁盘I/O的开始和结束处都有…

Three JS 调研

0. 结论 three.js是使用WebGL来绘制三维效果的&#xff0c;核心数据是3D对象和三维模型&#xff0c;更多的是关注如何通过webgl更精细而美的渲染数据 three.js相当于封装了webgl&#xff0c;但还是很底层&#xff0c;并不是一个类似于cesium或者mapbox这样的成熟地图框架&…

jQuery 插件开发

文章目录jQuery 插件开发插件概述常用插件文本溢出&#xff1a;dotdotdot.js单行文本省略多行文本省略延迟加载&#xff1a;lazyload.js插件编写方法类插件函数类插件jQuery 插件开发 插件概述 jQuery插件可以理解成是使用jQuery来封装的一个功能或特效。 一般来说&#xff…

Mac 截图工具 iShot Pro - 软件介绍、下载安装详细教程

Mac 截图工具 iShot Pro -软件介绍、下载安装详细教程 iShot -优秀&#xff0c;功能齐全的区域截图&#xff0c;窗口截图&#xff0c;多窗口截图&#xff0c;长屏幕截图&#xff0c;shell截图&#xff0c;时间间隔截图&#xff0c;快速注释&#xff0c;纹理&#xff0c;颜色匹配…

消息中间件Kafka快速入门

前言 Kafka是基于zookeeper管理的&#xff0c;所以要先安装zookeeper&#xff0c;如果是单机模式&#xff0c;zookeeper安装比较简单&#xff0c;本文就介绍一下单机如何搭建kafka&#xff0c;以及基本的java demo。 环境搭建 Zookeeper 安装 http://mirrors.cnnic.cn/apac…

Python 函数用法和底层分析

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…