Django博客搭建_其他模块-文档下载
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博客搭建_其他模块-文档下载相关推荐
- Django博客搭建_用户注册1_图片生成
Blog项目--用户注册 文章目录 Blog项目--用户注册 一.设计接口思路 二.功能分析 三.图片验证码接口代码实现 1.图片验证码认证 2.后端视图实现 2-1 测试 2-2 升级 四.类视图 ...
- Django博客搭建_找回密码
Blog项目--找回密码 文章目录 Blog项目--找回密码 一. 分析 二.步骤 三.代码 1. 前端 2. 后端--form 3. 后端--view 4. url 一. 分析 业务处理流程: 判断 ...
- Django博客搭建-新闻模块6-新闻搜索功能(Django+Haystack+elasticsearch)
Blog项目--新闻模块 文章目录 Blog项目--新闻模块 一.需求分析 二.搜索引擎原理 三.Elasticsearch 特点 四.使用docker安装elasticsearch 五.后端代码实现 ...
- 个人博客管理系统_教程 | 一文搭建你的第一个免费专属博客
点击蓝字关注我 本文将详细介绍利用Github+hexo搭建一个免费.简洁的个人博客,从获取域名到菜单栏.搜索框.评论分享这些必要功能的配置,给自己一个个性化的内容分享平台. -▼- 我建了一个QQ学 ...
- 51CTO博客2.0 答疑QA文档【2017.12.04更新】
博客2.0 – v1.0.0,以匠心精神,做好最重要的事 [Markdown编辑器]样式不错乱,减去调整的烦恼 [图片拖拽复制]再也不用一张张上传了,写文更高效 [文章目录自动提取]想看哪里点哪里 [ ...
- 博客粉丝群发功能使用文档
为了让我们的作者用户与粉丝之间有更好的互动,我们上线了「粉丝群发」功能,该功能是以给粉丝推送私信为主,如何操作,请看下面的文档. 第一步:打开「管理博客」→「粉丝服务」→「群发功能」 目前粉丝群发可以 ...
- django+bootstrap_Django自学教程PDF高清文档下载
事半功倍 笔者见过很多聪明的学生陷入僵局,浪费几小时的时间尝试解决遇到的 Django 或其他 Web 开发问题.这些问题往往是由于抓不住重点,或者所用的材料言语不详.有时,你可能灵光一现,在十几分钟 ...
- .net编写抽奖的文档_使用开源文档工具docsify,用写博客的姿势写文档
前提 ❝ 下面的简介摘抄自docsify的官网 https://docsify.js.org 中的简介 ❞ 「docsify」是一个神奇的文档网站生成器.他可以快速帮你生成文档网站.不同于GitBoo ...
- Django个人博客搭建8-优化文章模块
Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...
最新文章
- Docker Context基本原理
- .NET 面试题总结 (附有参考答案) 第1部分
- 研修项目文件丢失的处理思路
- 缓慢渐变维度的处理方式
- 信息学奥赛一本通C++语言——1123:图像相似度
- (转)linux自动备份oracle数据库并上传到备份服务器 脚本实现
- python进阶教程day_Python进阶教程m5–时间,日期
- (转)PLSQL Developer 12.0.7连接Oracle12c数据库
- Windows Server 2012 R2服务器集群测试
- 同步调用、异步调用和回调函数
- 递归算法经典实例python-Python实现经典递归算法
- 图片加载失败,img触发错误显示默认图片
- 解决 Unit is masked
- Markdown空两格,图片居中
- HRNet-v1模型,用于人体形态检测
- 全网最后一个免费版本,永久可用
- 测试工程师应具备的素质
- GTN Yan LeCun 1998 文章中的一步
- 服务器网站绕过备案,腾讯云服务器如何利用阿里DCDN绕过备案
- android手机性能优化,安卓手机性能怎么优化 安卓手机性能方法汇总
热门文章
- 企业数字化转型该怎么做?有效工具有哪些?
- win10电脑开机鼠标一直在转圈圈
- noip2005 过河 (数论+动态规划)
- 姚永平是STC南通国芯微电子/宏晶科技创始人,谈单片机设计
- 关于物模型的一些理解和总结
- 洋桃电子STM32物联网入门30步笔记四、工程编译和下载
- 2022电大国家开放大学网上形考任务-老年用药基本知识非免费(非答案)
- 一起拼团更划算,小区团购怎么做?分享经验!
- 人脸方向论文阅读(二)——Deep Face Representations for Differential Morphing Attack Detection
- 苹果审核内购图片无法上传的问题