Django怎么实现pdf在线预览(django pdf预览)

导读:今天首席CTO笔记来给各位分享关于Django怎么实现pdf在线预览的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

django drf_yasg 非restful风格的api怎么在swagger上展示?

使用Swagger

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。

在web api 使用swagger可以说非常简单,不需要编写任何代码,完全依赖于插件。具体步骤如下:

  1.新建一个web api项目

2.使用nuget添加Swashbuckle包

3.完成

没错,就是这么简单!运行项目,转到地址 会看到如下页面,这是默认添加的两个apicontroller:

这个时候接口还没有具体的描述信息等,例如我们给ValuesController.Get添加注释描述,在页面上还是没有显示出来。需要按照如下步骤实现:

1. 在app_start 下 SwaggerConfig 大100行的位置找到 //c.IncludeXmlComments(GetXmlCommentsPath()); 如下注释,改为:c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name)); (注意去掉注释了)

2. 在SwaggerConfig添加一个方法代码:

1

2

3

4

protected static string GetXmlCommentsPath(string name)

{

return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);

}

3. 修改项目生成,在bin下对应的xml文件可以看到具体的描述文档,如下:

重新生成项目,就要可以看到完整的接口描述了。例如我们心中一个TestController如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

/// summary

/// 测试控制器

/// /summary

public class TestController : ApiController

{

/// summary

/// 测试Get方法

/// /summary

/// remarks测试Get方法/remarks

/// returns/returns

[HttpGet]

public string Get()

{

return "Get";

}

/// summary

/// 测试Post方法

/// /summary

/// param name="name"姓名/param

/// param name="age"年龄/param

/// remarks测试Post方法/remarks

/// returns/returns

[HttpPost]

public string Post(string name, int age)

{

return name + age.ToString();

}

}

生成的页面如下,可以看到接口的描述,点击Try it out 即可调用:

三、非依赖代码

上面的方式依赖于Swashbuckle包,它已经包含了Swagger-UI组件。我们的代码需要引入这个包,实际上也可以不需要在项目中引入,单独部署Swagger,包括Swagger-Ui(api展示) 和 Swagger-Editor(在线编辑器),它需要依赖nodejs环境,所以需要先按照nodejs。部署其实也很简单,例如这是我部署的结果:

swagger-editor:

swagger-ui:

编辑后只需要将文件保存为json文件,然后拷贝到指定的目录即可。这个部署也非常简单,具体可以参照:

Django怎么实现pdf在线预览(django pdf预览)  第1张

django实现文件上传到服务器

response = requests.post(PATH, data={'document_name': document_path, 'file': base64.b64encode(file.read())}) 这个方法其实就是将文件信息和转成base64的文件发到服务器那边,那边就是以下的方法存入服务器

文件存入本地的方法

《DjangoByExample》pdf下载在线阅读,求百度网盘云资源

《Django By Example》(Antonio Mele)电子书网盘下载免费在线阅读

资源链接:

链接:

密码:4ke3

书名:Django By Example

作者:Antonio Mele

豆瓣评分:9.3

出版社:Packt Publishing

出版年份:2015-11-30

页数:474

内容简介:

Learn Django by building four fully-functional, real-world web applications from scratch

Develop powerful web applications quickly using the best coding practices

Integrate other technologies into your application with clear, step-by-step explanations and comprehensive example code

作者简介:

Antonio Mele holds an MSc in Computer Science. He has been developing Django projects since 2006 and leads the django.es Spanish Django community. He has founded Zenx IT, a technology company that creates web applications for clients of several industries. Antonio has also worked as a CTO for several technology-based start-ups. His father inspired his passion for computers and programming.

PDF库全文检索

思路比较清晰,首先从pdf中提取文字,然后利用搜索引擎完成文字检索,每一步都有现成的开源工具。

这里需要关注的系统架构的问题。如果pdf文件很大,那么提取文字要耗费大量的时间,总不能让用户在那里等待响应,毕竟提取文字并不需要那么高的实时性,后台慢慢处理就行。

所以这里用Django+celery+redis实现异步任务队列。用户上传文档后,Django把提取文字的任务通过celery发送给redis,然后就返回响应,用户无需等待。

求助django 实现前端页面检索功能的代码

设我们的 django 博客应用有如下的文章模型:

blog/models.pyclass Post(models.Model):

# 标题

title = models.CharField(max_length=70)

# 正文

body = models.TextField()

# 其他属性

def __str__(self):

return self.title

先看到第 1 步,用户在搜索框输入搜索关键词,因此我们要在博客上为用户提供一个搜索表单,html 表单代码大概像这样:

form method="get" action="/search/"

{% csrf_token %} input type="search" placeholder="搜索" required

button type="submit"搜索/button/form

特别注意在 form 标签下有一个 {% csrf_token %},这是 django 用来防御跨站请求伪造(CSRF)攻击的机制。如果不知道什么是 CSRF 的话也没有关系,只要记住在使用 django 时,前端的表单代码里一定要加上 {% csrf_token %}。

用户输入了搜索关键词并点击了搜索按钮后,数据就被发送给了 django 后台服务器。表单的 action 属性的值为 /search/,表明用户提交的结果将被发送给 /search/ 这个 URL。我们为这个 URL 绑定一个 django 视图函数,在这个视图函数里完成前面第 2 步提到的过程。假设我们把视图函数的代码写在 blog/views.py 里:

blog/views.pydef search(request):

q = request.GET.get('q')

error_msg = ''

if not q:

error_msg = '请输入关键词'

return render(request, 'blog/errors.html', {'error_msg': error_msg})

post_list = Post.objects.filter(title__icontains=q)

return render(request, 'blog/results.html', {'error_msg': error_msg,

'post_list': post_list})

首先我们使用 request.GET.get('q') 获取到用户提交的搜索关键词。用户通过表单提交的数据 django 为我们保存在 request.GET 里,这是一个类似于 Python 字典的对象,所以我们使用 get 方法从字典里取出键 q 对应的值,即用户的搜索关键词。这里字典的键之所以叫 q 是因为我们的表单中搜索框 input 的 name 属性的值是 q,如果修改了 name 属性的值,那么这个键的名称也要相应修改。

接下来我们做了一个小小的校验,如果用户没有输入搜索关键词而提交了表单,我们就无需执行查询,而是渲染一个错误页面提示用户请输入关键词。

如果用户输入了搜索关键词,我们就通过 filter 方法从数据库里过滤出符合条件的所有文章。这里的过滤条件是 title__icontains=q,即 title 中包含(contains)关键字 q,前缀 i 表示不区分大小写。这里 icontains 是查询表达式(Field lookups),其用法是在模型需要筛选的属性后面跟上两个下划线。django 内置了很多查询表达式,建议过一遍 django 官方留个印象,了解每个表达式的作用,以后碰到相关的需求就可以快速定位到文档查询其用途:Field lookups

接下来就是渲染搜索结果页面,显示符合搜索条件的文章列表,下面是一个模板的简单示例:

results.html

{% if error_msg %} p{{ error_msg }}/p{% endif %}

{% for post in post_list %} div

在这里显示文章的相应信息 /div{% empty %} div class="no-post"

没有搜索到符合条件的文章 /div{% endfor %}

有了视图函数后记得把视图函数映射到相应了 URL,前面我们表单数据提交的 URL 为 /search/,因此将视图函数 search 绑定到该 URL 上。

blog/urls.pyurlpatterns = [

# 其他 url 配置

url(r'^search/$', views.search, name='search'),]

大功告成!

结语:以上就是首席CTO笔记为大家介绍的关于Django怎么实现pdf在线预览的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。

以上内容为新媒号(sinv.com.cn)为大家提供!新媒号,坚持更新大家所需的互联网后端知识。希望您喜欢!

版权申明:新媒号所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请发送邮件至 k2#88.com(替换@) 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023-09-24
下一篇 2023-09-24

相关推荐

发表回复

登录后才能评论