Blog项目——其他模块

文章目录

  • Blog项目——其他模块
    • 一、分析
    • 二、模型实现
    • 三、路由注册
    • 四、后端代码实现
      • 视图部分
      • 路由部分
    • 五、前端代码实现
      • html部分
      • css部分

一、分析

业务处理流程:

  • 判断前端传的文件id是否为空,对应的文件是否存在

请求方法GET

url定义/docs/<int:doc_id>/

请求参数:url路径参数

参数 类型 前端是否必须传 描述
doc_id 整数 文件id

此功能是通过向前端返回FileResponse来实现的。

二、模型实现

应为文档的模型并没有创建,因此我们需要先创建app,并且进行注册。代码就不演示了,下面直接说模型部分。

模型所需的字段:

  • 文件地址
  • 书籍的标题
  • 数据的描述
  • 书籍封面图
  • 作者
# doc/models.py
from django.db import models
from utils.BaseModel import ModelBaseclass Docs(ModelBase):"""文件地址书籍的标题书籍的描述信息书籍的封面图作者"""file_url = models.URLField("文件地址", help_text="书籍地址")title = models.CharField("书籍标题", max_length=150)desc = models.TextField("书籍描述")image_url = models.URLField("书籍封面", default="")auther = models.ForeignKey("user.Users", on_delete=models.SET_NULL, null=True)class Meta:db_table = "tb_docs"verbose_name = "书籍"def __str__(self):return self.title

接下来就是执行迁移即可

剩下的就是将sql文件导入。

mysql -uuser -ppsw -D database < tb_docs.sql

三、路由注册

首先先进入主路由,将doc的路由放入

# blog_django/urls
path('docs/',include('docs.urls')),

接下来就是进入doc路由,创建urls文件,

# -*- coding: utf-8 -*-
# @Auther:Summer
from django.urls import pathapp_name = "news"urlpatterns = []

四、后端代码实现

在请求资源的时候,我们要使用request库,我们这个地方也需要使用,因此需要提前安装

pip install requests
# 在Blog_Djnago/settings.py中加入如下配置 # 站点域名和端口配置
DOC_FILE_URL = "http://127.0.0.1:8000"

视图部分

# doc/views.py
from django.shortcuts import render
from django.views import View
from django.http import HttpResponse, FileResponse, Http404
from django.utils.encoding import escape_uri_pathfrom .models import Docs
from Blog_Django.settings import DOC_FILE_URL
import requestsdef doc(request):docs = Docs.objects.only("image_url", "title", "desc").filter(is_delete=False)return render(request, "doc/docDownload.html", context={"docs":docs})class DocDownload(View):def get(self, request, doc_id):doc_file = Docs.objects.only("file_url").filter(is_delete=False,id=doc_id).first()if doc_file:doc_url = doc_file.file_urldoc_url = DOC_FILE_URL + doc_url# res = HttpResponse(requests.get(doc_url))  # 如果使用这个,可能会产生文件过大而导致系统堵塞res = FileResponse(requests.get(doc_url))  # 分批写入用户的内存,一个批次4096# 获取尾坠,查看格式ex_name = doc_url.split(".")[-1]if not ex_name:raise Http404("文件名异常")else:ex_name = ex_name.lower()if ex_name == 'pdf':res['Content-type'] = 'application/pdf'elif ex_name == 'doc':res['Content-type'] = 'application/msowrd'elif ex_name == 'ppt':res['Content-type'] = 'application/powerpoint'else:raise Http404('文件格式不正确')doc_filename = escape_uri_path(doc_url.split("/")[-1])# attachment  保存  inline 显示res["Content-Disposition"] = "attachment; filename*=UTF-8''{}".format(doc_filename)return reselse:raise Http404('文档不存在')

路由部分

# -*- coding: utf-8 -*-
# @Auther:Summer
from django.urls import path
from . import viewsapp_name = "doc"urlpatterns = [path("", views.doc),path("download/<int:doc_id>", views.DocDownload.as_view(), name="download"),
]

五、前端代码实现

html部分

{% extends "base/base.html" %}{% block title %}payInfo
{% endblock %}{% block link %}<link rel="stylesheet" href="../../static/css/doc/docDownload.css">
{% endblock %}{% block main_contain %}<div class="main-contain "><div class="banner"><img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1802845035,3786939119&fm=26&gp=0.jpg"alt=""></div><div class="pay-doc-contain"><ul class="pay-list">{% for doc in docs %}<li class="pay-item"><img src="{{ doc.image_url }}" alt="{{ doc.title }}" class="pay-img doc"><div class="d-contain"><p class="doc-title">{{ doc.title }}</p><p class="doc-desc">{{ doc.desc }}</p><!-- /www/?xxx --><a href="{% url 'doc:download' doc.id %}" class="pay-price">下载</a></div></li>{% endfor %}</ul></div></div>
{% endblock %}

css部分

/* ================= main start ================= */
#main {margin-top: 25px;min-height: 700px;flex: 1;
}/* ========= main-contain start ============ */
#main .main-contain {width: 800px;float: left;margin-bottom: 30px;
}/* ========= banner start =========== */
.main-contain .banner {width: 100%;
}.main-contain .banner img {max-width: 100%;
}.main-contain .pay-doc-contain {background: #fff;
}.main-contain .pay-doc-contain .pay-list {display: flex;justify-content: space-between;flex-flow: wrap;padding: 0 20px 20px;
}.main-contain .pay-doc-contain .pay-item {width: 800px;height: 200px;border-top: 1px solid #ddd;margin-top: 20px;display: flex;
}.main-contain .pay-doc-contain .pay-item:hover {box-shadow: 2px 2px 2px #ccc;
}.pay-doc-contain .pay-item .pay-img {width: 120px;margin-right: 30px;
}.pay-doc-contain .pay-item .pay-contain {width: 250px;position: relative
}.pay-item .pay-contain .pay-title {font-size: 20px;line-height: 40px;white-space: nowrap;overflow: hidden;
}.pay-item .pay-contain .pay-desc {line-height: 20px;color: #878787;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;font-size: 14px;overflow: hidden;
}.pay-item .pay-price {display: block;font-size: 20px;text-align: right;padding-right: 20px;color: coral;
}.d-contain {width: 100%;margin: 20px 0 20px ;font-size: 18px;line-height: normal;
}.d-contain .doc-desc {text-indent: 2em;margin: 15px;/*padding: 10px;*/
}.d-contain .doc-title {font-size: 20px;font-weight: bold;color: chocolate;
}
/* ========= banner end =========== */
/* ========= main-contain end ============ */
/* ================= main end ================= */

Django博客搭建_其他模块-文档下载相关推荐

  1. Django博客搭建_用户注册1_图片生成

    Blog项目--用户注册 文章目录 Blog项目--用户注册 一.设计接口思路 二.功能分析 三.图片验证码接口代码实现 1.图片验证码认证 2.后端视图实现 2-1 测试 2-2 升级 四.类视图 ...

  2. Django博客搭建_找回密码

    Blog项目--找回密码 文章目录 Blog项目--找回密码 一. 分析 二.步骤 三.代码 1. 前端 2. 后端--form 3. 后端--view 4. url 一. 分析 业务处理流程: 判断 ...

  3. Django博客搭建-新闻模块6-新闻搜索功能(Django+Haystack+elasticsearch)

    Blog项目--新闻模块 文章目录 Blog项目--新闻模块 一.需求分析 二.搜索引擎原理 三.Elasticsearch 特点 四.使用docker安装elasticsearch 五.后端代码实现 ...

  4. 个人博客管理系统_教程 | 一文搭建你的第一个免费专属博客

    点击蓝字关注我 本文将详细介绍利用Github+hexo搭建一个免费.简洁的个人博客,从获取域名到菜单栏.搜索框.评论分享这些必要功能的配置,给自己一个个性化的内容分享平台. -▼- 我建了一个QQ学 ...

  5. 51CTO博客2.0 答疑QA文档【2017.12.04更新】

    博客2.0 – v1.0.0,以匠心精神,做好最重要的事 [Markdown编辑器]样式不错乱,减去调整的烦恼 [图片拖拽复制]再也不用一张张上传了,写文更高效 [文章目录自动提取]想看哪里点哪里 [ ...

  6. 博客粉丝群发功能使用文档

    为了让我们的作者用户与粉丝之间有更好的互动,我们上线了「粉丝群发」功能,该功能是以给粉丝推送私信为主,如何操作,请看下面的文档. 第一步:打开「管理博客」→「粉丝服务」→「群发功能」 目前粉丝群发可以 ...

  7. django+bootstrap_Django自学教程PDF高清文档下载

    事半功倍 笔者见过很多聪明的学生陷入僵局,浪费几小时的时间尝试解决遇到的 Django 或其他 Web 开发问题.这些问题往往是由于抓不住重点,或者所用的材料言语不详.有时,你可能灵光一现,在十几分钟 ...

  8. .net编写抽奖的文档_使用开源文档工具docsify,用写博客的姿势写文档

    前提 ❝ 下面的简介摘抄自docsify的官网 https://docsify.js.org 中的简介 ❞ 「docsify」是一个神奇的文档网站生成器.他可以快速帮你生成文档网站.不同于GitBoo ...

  9. Django个人博客搭建8-优化文章模块

    Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...

最新文章

  1. Docker Context基本原理
  2. .NET 面试题总结 (附有参考答案) 第1部分
  3. 研修项目文件丢失的处理思路
  4. 缓慢渐变维度的处理方式
  5. 信息学奥赛一本通C++语言——1123:图像相似度
  6. (转)linux自动备份oracle数据库并上传到备份服务器 脚本实现
  7. python进阶教程day_Python进阶教程m5–时间,日期
  8. (转)PLSQL Developer 12.0.7连接Oracle12c数据库
  9. Windows Server 2012 R2服务器集群测试
  10. 同步调用、异步调用和回调函数
  11. 递归算法经典实例python-Python实现经典递归算法
  12. 图片加载失败,img触发错误显示默认图片
  13. 解决 Unit is masked
  14. Markdown空两格,图片居中
  15. HRNet-v1模型,用于人体形态检测
  16. 全网最后一个免费版本,永久可用
  17. 测试工程师应具备的素质
  18. GTN Yan LeCun 1998 文章中的一步
  19. 服务器网站绕过备案,腾讯云服务器如何利用阿里DCDN绕过备案
  20. android手机性能优化,安卓手机性能怎么优化 安卓手机性能方法汇总

热门文章

  1. 企业数字化转型该怎么做?有效工具有哪些?
  2. win10电脑开机鼠标一直在转圈圈
  3. noip2005 过河 (数论+动态规划)
  4. 姚永平是STC南通国芯微电子/宏晶科技创始人,谈单片机设计
  5. 关于物模型的一些理解和总结
  6. 洋桃电子STM32物联网入门30步笔记四、工程编译和下载
  7. 2022电大国家开放大学网上形考任务-老年用药基本知识非免费(非答案)
  8. 一起拼团更划算,小区团购怎么做?分享经验!
  9. 人脸方向论文阅读(二)——Deep Face Representations for Differential Morphing Attack Detection
  10. 苹果审核内购图片无法上传的问题