打分吧!客服小姐姐,评分页面与客户总分页面的 Django 实现

举报
梦想橡皮擦 发表于 2021/05/26 15:23:01 2021/05/26
【摘要】 橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 Django 世界。 已经完成的文章 滚雪球学 Python 第三轮,Python Web 之 Django 的世界小手哆嗦一下,就能用 Python Django 实现一个微型博客系统Django 做个小后台,细节在完善一点点,滚雪球学 Python 第三阶段Django QuerySet 就学...

橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 Django 世界。

已经完成的文章

十四、打分页面逻辑与实现

14.1 打分页面功能实现

本篇博客主要内容为实现打分系统的打分页面,最终效果为简版格式。
首先在 templates/ttt 目录中新建一个 detail.html 文件,输入如下内容。

{% if customer %}
<h2>正在为客户【{{customer.name}}】打分</h2>
{% if state == "success" %}
<h3>打分成功!</h3>
{% endif %}

<form method="post">
  {% csrf_token %}
  <label for="s">请打分:</label>
  <select name="s" id="s"> <option value="10">10</option> <option value="30">30</option> <option value="50">50</option> <option value="70">70</option> <option value="90">90</option> <option value="100">100</option>
  </select>
  <button type="submit">确定打分</button>
</form>
<a href="{% url 'scoring:index' %}">返回列表</a>
{% else %}
<p>无客户</p>
{% endif %}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

该页面由上一篇博客中超链接跳转进入。

打分吧!客服小姐姐,评分页面与客户总分页面的 Django 实现

接下来修改 views.py,补充打分数据保存相关逻辑。

# 客户详情&打分页面
def detail(request, _id): # 用户打分状态信息 state = None # 渲染详情页面 customer = Customer.objects.get(_id=_id) # 当用户提交打分信息 if request.method == "POST": user_score_number = request.POST.get("s", 0) user_score = Score(customer=customer, score=user_score_number) user_score.save() state = "success"  # 表示打分成功 context = { "customer": customer, "state": state } return render(request, "ttt/detail.html", context)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在实现该页面逻辑时,发现之前在打分模型中增加的 User 模型的外键出现问题,必须登录才能保存数据,故修改 Score 模型如下,去除 User 模型外键。

class Score(models.Model): # 自增主键 _id = models.AutoField(primary_key=True) customer = models.ForeignKey(Customer, on_delete=models.CASCADE) score = models.IntegerField(default=0, verbose_name="分数") # user_id = models.ForeignKey(User, on_delete=models.CASCADE)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

模型修改之后,需要通过 migrate 迁移命令将修改保存到文件中。
这些内容都修改完毕,就可以通过 http://127.0.0.1:8000/scoring/2/ 访问打分页面了,点击确定打分,将数据发送到 views.py 中进行保存。

打分吧!客服小姐姐,评分页面与客户总分页面的 Django 实现

14.2 Django 知识点补充

在上文代码中的 detail.html 页面出现的 {% csrf_token %} 代码块,用于在 post 提交数据时,防止伪造跨站点请求。
request.POST 是一个类字典对象,用于通过关键字获取提交的数据,例如上述代码中,通过 request.POST.get("s", 0) 获取 detail.html 页面提交的下拉列表内容。

对于上述代码,可以进行修改,当小姐姐打分之后,直接跳转到客户列表页面。该编码习惯可以防止用户重复提交数据,建议牢记。

# 客户详情&打分页面
def detail(request, _id): # 渲染详情页面 customer = Customer.objects.get(_id=_id) if request.method == "POST": user_score_number = request.POST.get("s", 0) user_score = Score(customer=customer, score=user_score_number) user_score.save() # 页面跳转 return HttpResponseRedirect(reverse("scoring:index")) else: context = { "customer": customer } return render(request, "ttt/detail.html", context)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

14.3 客户分数汇总页面

客户分数查询只需要用到 Django 中对符合条件的列求和即可。该部分细节知识点会在后续博客中进行讲解,本文优先实现最终效果即可。

# 客户分数查阅
def show_score(request, _id): customer = Customer.objects.get(_id=_id) total = Score.objects.filter(customer=customer).aggregate(nums=Sum('score')) print(total['nums']) return HttpResponse(f"客户 {id} 的总分是 {total}")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上述代码只会输入一段文本,对其进行修改并匹配上相应的模板,代码如下:

# 客户分数查阅
def show_score(request, _id): customer = Customer.objects.get(_id=_id) total = Score.objects.filter(customer=customer).aggregate(nums=Sum('score')) context = { "customer":customer, "total": total["nums"] } return render(request, "ttt/show_score.html", context)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

show_score.html 文件代码如下:

{% if customer %}
<h2>{{ customer.name }} 的总得分是 {{ total }}</h2>
{% else %}
<p>无客户</p>
{% endif %}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

最终无效果的静态页面如下图所示。

打分吧!客服小姐姐,评分页面与客户总分页面的 Django 实现

14.4 本篇博客小节

本篇博客实现了打分系统的评分页面与客户分数汇总展示页面,希望你能在本篇博客中学到知识。

相关阅读

  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 游戏世界(更新中,目标文章数 50+,现在订阅,都是老粉)
  3. Python 爬虫小课,精彩 9 讲,只要 9 块 9

今天是持续写作的第 132 / 200 天。
如果你想跟博主建立亲密关系,可以关注同名公众号 梦想橡皮擦,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家点赞评论收藏

文章来源: dream.blog.csdn.net,作者:梦想橡皮擦,版权归原作者所有,如需转载,请联系作者。

原文链接:dream.blog.csdn.net/article/details/115605260

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。