PDF.js跨域(django后端处理数据流方法)

前言

PDF.js is a Portable Document Format (PDF) viewer that is built with HTML5. 下载地址https://github.com/mozilla/pdf.js/releases

跨域

网上也有一些设置nginx服务器实现跨域,这里只考虑是把pdf文件请求到后端返回数据流的形式来实现

  • 首先
  • 修改viewer.js
function webViewerLoad() {
  var config = getViewerConfiguration();
  window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
  window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions;
  var event = document.createEvent('CustomEvent');
  event.initCustomEvent('webviewerloaded …
more ...

Docker部署应用 Django+daphne+Gunicorn+Nginx+Redis

前言

这里使用Docker部署应用,用到的技术栈

  • Django==2.2.14
  • Daphne, 支持HTTP, HTTP2 和 WebSocket 的asgi的服务器,这里主要是处理WebSocket 的请求。
  • Gunicorn, green unicorn 简称,unix系统的wsgi http服务器 处理符合wsgi的接口。
  • Nginx, 静态资源处理和请求的分发等,http请求指向gunicorn进程,websocket请求指向daphne进程等。
  • Docker, 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。

tips: 这里默认大家已经安装dockerdocker-compose

代码准备

这里使用GitHub上的django-channels实现的websokect项目: https://github.com/xhongc/dj-chat

git clone  https://github.com/xhongc/dj-chat.git

构建镜像 …

more ...

Docker 镜像修改和提交

当你发现构建的镜像缺少python模块,可以进入镜像修改


1.启动镜像

  • docker run -it "<镜像ID>" /bin/bash
  • 修改...
  • exit

2.提交修改

  • 容器ID = 修改后docker ps -l 查看生成的容器ID
  • docker commit "<容器ID>" image_name:tag
    查看镜像已经有了修改
more ...

Github Pages不能自动更新

刚刚往github pages的repository里提交了一篇文章后,却发现github pages的页面一直没有更新——看不到新提交的文章。网上搜了一些资料,最后解决了这个问题。

一般来说,只要你的github pages repository有新的提交,github的服务器就会运行jekyll编译你的repository(延时很小)。如果编译出错,那么你的github pages页面是不会更新的;同时,github也会给你发一封提醒邮件,大致内容如下,

The page build failed for the `master` branch with the following error:

Unable to build page. Please try again later.

For information on troubleshooting Jekyll see:

  https://help.github.com/articles …
more ...

使用 Python 在 GitHub 上运行你的博客

每个入门程序员或多都想拥有一个自己博客站点,苦于高额的服务器费用和较为麻烦的操作步骤,你完全可以通过 GitHub Pages来实现一个免费,可定制的书写,记录生活,技术分享的平台。

为什么使用 GitHub Pages

  • 首先它是完全免费,可以省下一笔服务费
  • 无须自己购买云服务进行搭建,只需按步骤一步步操作即可,即使你不懂他的技术细节;
  • 支持的功能多,玩法丰富,你可以绑定你的域名、使用免费的 HTTPS、自己 DIY 网站的主题、使用他人开发好的插件等等
  • 当完成搭建后,你只需要专注于文章创作就可以了,其他诸如环境搭建、系统维护、文件存储的事情一概不用操心,都由 GitHub 处理

Github中创建一个仓库

选择创建一个新的 Repository 在 Repository name 的位置填写域名,格式是 username.GitHub.io

安装 Pelican

pip install pelican ghp-import …

more ...

python协程库asyncio(异步io)

介绍

异步IO:就是发起一个IO操作(如:网络请求,文件读写等),这些操作一般是比较耗时的,不用等待它结束,可以继续做其他事情,结束时会发来通知。 协程:又称为微线程,在一个线程中执行,执行函数时可以随时中断,由程序(用户)自身控制,执行效率极高,与多线程比较,没有切换线程的开销和多线程锁机制。


asyncio中几个重要概念

1.事件循环

事件循环是每个 asyncio 应用的核心,管理所有的事件,在整个程序运行过程中不断循环执行并追踪事件发生的顺序将它们放在队列中,空闲时调用相应的事件处理者来处理这些事件。 - 创建事件循环 loop = asyncio.get_event_loop() 获取当前事件循环。 如果当前 OS 线程没有设置当前事件循环并且 set_event_loop() 还没有被调用,asyncio 将创建一个新的事件循环并将其设置为当前循环。

  • 另起一个线程创建事件循环
from threading import Thread
import asyncio

def start_thread_loop …
more ...