django

django中的Session和Cookie

Roy

简单来说,Cookie和Session都是为了记录用户相关信息的方式,最大的区别就是Cookie在客户端记录而Session在服务端记录内容。

那么Cookie和Session之间的联系是怎么建立的呢?换言之,当服务器接收到一个请求时候,根据什么来判断读取哪个Session的呢?

对于Django默认情况来说,当用户登录后就可以发现Cookie里有一个sessionid的字段,根据这个key就可以取得在服务器端记录的详细内容。如果将这个字段删除,刷新页面就会发现变成未登录状态了。

django-rest-jwt认证

Roy

关于JWT(Json Web Token)是一种较新的用户认证方式,官网在这里,网上有篇中文解释写的很好,点此跳转

用户认证(Authentication)和用户授权(Authorization)是两个不同的概念,认证解决的是“有没有”的问题,而授权解决的是“能不能”的问题。

一般用到JWT认证的情况大多都是配合REST框架使用,比如我大Django的Django-REST-framework框架,就已经有了现成的三方库django-rest-framework-jwt。不过这个库默认只支持基于Header传递信息,所以改成基于Cookie方式还需要我们来手动处理一下。

将Django模板变量传递给外部JS调用的几种方式

Roy

最近一直在思考如何更好的组织Django中的静态资源,比如JS、CSS一类,如何结合前端构建工具写出更好的代码以及结构呢?

首先需要解决的一个问题就是某些时候需要把JS代码写在模板里来获取后台传递过来的变量,比如:

<div>
<h1>Test</h1>
<div id="my-test" ></div>
</div>
<script>
$(function(){
  $('#my-test').html("{{ some_var_from_view }}")
});
</script>

这么写代码的话,别扭不说,前端的那些构建工具比如webpack,gulp的使用范围也将大大降低。

首先说结论,想完全剥离JS和模板而又需要使用模板渲染的数据,我是没想到什么好办法。如果读者有好办法希望赐教。 既然不能完全剥离,那么就进最大的努力分离JS所需的数据和代码吧。

我特么是如何利用Django, Django REST Framework, Angular 1.1.x和Webpack构建一个项目的

Roy

原文地址,向原作者表示感谢。由于本人并没学习过angular,所以翻译有误的地方恳请指正。


我已经受够了JS社区的那帮二货,我只是想使用Django作为后端结合Angular做一个简单的、可复用的项目,却没有一个简明的指导教我如何做到。如果你也为此挣扎,这里有一份指南教你如何构建一个由Django作为后端、Webpack进行组织的Angular程序。

问题

我想开发一个Angular1.1.x的项目并使用Django作为后端提供数据,我喜欢使用Django REST Framework(DRF)来构造RESTful API。我也想打包需要的JavaScript资源。目前,我打算使用单一的服务器上运行这个程序。

依赖

  • Python 2.x
  • a virtual Python environment
  • Django 1.9.x (pip install django)
  • npm 2.15.8+
  • Webpack 1.13.x (sudo npm i -g webpack)
  • ESLint 2.13.1+ (sudo npm i -g eslint)
  • NodeJS 4.4.7+

django解析用户上传的excel文件

Roy
有些时候我们会有这种需求:用户上传一个格式固定excel表格到网站上,然后程序负债解析内容并进行处理。 举一个简单的栗子,比如我们有这样一个HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <p>上传EXCEL表格</p> <form class="" action="" method="post" enctype="multipart/form-data" > {% csrf_token %} <input type="file" name="excel"> <input type="submit" value="上传"> </form> </body> </html> forms.

使用python模拟POST请求提交图片

Roy

使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传图片来说,简单的几行代码即可:

import requests
files = {'attachment_file': ('1.png', open('1.png', 'rb'), 'image/png', {})}
values = {'next':"http://www.xxxx.com/xxxx"}
r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 成功

r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败

r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败

r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败

r = requests.post('http://www.xxxx.com/upload', files=files, data=values) # 失败

...

不过我今天在调试一个django程序的时候却遇到了大坑————为了偷懒,我直接在ipython中执行了上述代码,第一次提交的时候一切正常,但第二次之后提交就怎么也通过不了django的form验证。