输出中文到CSV,excel打开乱码 |
java |
|
response.getWriter().print("\uFEFF");// 加上BOM\uFEFF
response.getWriter().print(strBuffer.toString());
|
golang 从GBK与UTF-8互转的例子 |
|
|
package main
import (
"code.google.com/p/mahonia"
"fmt"
)
func main() {
//"你好,世界!"的GBK编码
testBytes := []byte{0xC4, 0xE3, 0xBA, 0xC3, 0xA3, 0xAC, 0xCA, 0xC0, 0xBD, 0xE7, 0xA3, 0xA1}
var testStr string
utfStr := "你好,世界!"
var dec mahonia.Decoder
var enc mahonia.Encoder
testStr = string(testBytes)
dec = mahonia.NewDecoder("gbk")
if ret, ok := dec.ConvertStringOK(testStr); ok {
fmt.Println("GBK to UTF-8: ", ret, " bytes:", testBytes)
}
enc = mahonia.NewEncoder("gbk")
if ret, ok := enc.ConvertStringOK(utfStr); ok {
fmt.Println("UTF-8 to GBK: ", ret, " bytes: ", []byte(ret))
}
return
}
|
http://stackoverflow.com/questions/27412135/django-redis-how-do-i-properly-use-connection-pooling |
django |
|
# Redis Settings
# settings.py
import redis
REDIS_CONN_POOL_1 = redis.ConnectionPool(host='localhost', port=6379, db=0)
# views.py
from django.conf import settings
REDIS_CONN_POOL_1 = settings.REDIS_POOL_1
r = redis.Redis(connection_pool=REDIS_CONN_POOL_1)
r.get("foobar") # Whatever operation
|
JasperReport + iReport 实现Java报表套打 |
java |
JasperReport + iReport 实现Java报表套打 |
package com.vincent.report.demo;
import net.sf.jasperreports.engine.*;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
/**
* 测试
* Created by IntelliJ IDEA.
* User: liuxiaohua
* Date: 2008-4-28
* Time: 8:43:38
* To change this template use File | Settings | File Templates.
*/
public class Demo extends HttpServlet {
@SuppressWarnings("deprecation")
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String doType = request.getParameter("doType");
try {
//Jasper 文件
File reportFile = new File(request.getRealPath("/jasperreport/liuxiaohua_report.jasper"));
Map paramter = new TreeMap();
//背景图片做为参数传递,不用写绝对路径
paramter.put("image", request.getRealPath("/jasperreport/report.gif"));
//根据 doType 的不同,传递不同的参数(是否传递背景图片)
//这里需要注意的是:这报表的设计的时候 image 这个参数的 Use as a Prompt 复选框不要选
//如果你选了那你一定要传递这个参数过去
//这样你就在显示报表的时候传递一个背景图,打印时不传递背景图,打印出来的报表就没有背景了
//这样就可以实现套打,具体打印代码我就不写了。
byte[] bytes = JasperRunManager.runReportToPdf(
reportFile.getPath(), doType.equalsIgnoreCase("print") ? null : paramter, new JREmptyDataSource());
//生成PDF文件
response.setContentType("application/pdf");
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception e) {
System.out.println("error");
e.printStackTrace();
}
}
}
|
python 加密解密 |
加密 |
http://www.cnblogs.com/kaituorensheng/p/4501128.html |
|
在Django中提供大内容(或大文件)下载 |
django |
在Django中提供大内容(或大文件)下载 |
from django.http import HttpResponse
__author__ = 'wei.xi'
#http://stackoverflow.com/questions/1371020/django-flush-response
#传入一个迭代器
def bigFileView(request):
# do something...
def readFile(fn, buf_size=262144):
f = open(fn, "rb")
while True:
c = f.read(buf_size)
if c:
yield c
else:
break
f.close()
file_name = "big_file.txt"
response = HttpResponse(readFile(file_name))
return response
|
SHA1 |
加密 |
|
public static String toSHA1(String str) {
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-1");
md.reset();
md.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException caught!");
System.exit(-1);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] byteArray = md.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(
Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
|
打印pdf |
|
|
<html>
<head>
<title>Adobe打印</title>
<script type="text/javascript"">
function printPDF() {
var adobeReader = document.getElementById("adobeReader");
adobeReader.click();
adobeReader.setActive();
adobeReader.focus();
adobeReader.print();
}
</script>
</head>
<body onload="printPDF()">
<object id="adobeReader" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="780" height="550" border="0" toolbar="false">
<param name="_Version" value="65539">
<param name="_ExtentX" value="20108">
<param name="_ExtentY" value="10866">
<param name="_StockProps" value="0">
<param name="SRC" value="createSamplePDF.pdf">
</object>
<input type='button' onclick='printPDF();' value='11'/>
</body>
</html>
|
itext加条码,加二维码,自动打印 |
itext |
|
private void createSamplePDF() throws Exception {
//Step 1鈥擟reate a Document.
Document document = new Document();
//Step 2鈥擥et a PdfWriter instance.
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createSamplePDF.pdf"));
//Step 3鈥擮pen the Document.
document.open();
//Step 4鈥擜dd content.
document.add(new Paragraph("Hello World"));
//Step 5鈥擟lose the Document.
StringBuffer script = new StringBuffer();
//给pdf加上脚本实现自动掉打印机,然后自动关闭
script.append("this.print({bUI: false,bSilent: true,bShrinkToFit: false});");
//自动关闭的脚本
//.append("\r\nthis.closeDoc();");
writer.addJavaScript(script.toString());
String myString = "http://www.google.com";
PdfContentByte cb = writer.getDirectContent();
Barcode128 code128 = new Barcode128();
code128.setCode(myString.trim());
code128.setCodeType(Barcode128.CODE128);
Image code128Image = code128.createImageWithBarcode(cb, null, null);
code128Image.setAbsolutePosition(10,700);
code128Image.scalePercent(125);
document.add(code128Image);
BarcodeQRCode qrcode = new BarcodeQRCode(myString.trim(), 1, 1, null);
Image qrcodeImage = qrcode.getImage();
qrcodeImage.setAbsolutePosition(10,600);
qrcodeImage.scalePercent(200);
document.add(qrcodeImage);
document.close();
}
|
可以使用Django的remote user绕过密码验证 |
django |
|
可以使用Django的remote user绕过密码验证,
在AUTHENTICATION_BACKENDS这个配置里加上django.contrib.auth.backends.RemoteUserBackend,
然后:
from django.contrib.auth import authenticate, login
user = authenticate(remote_user=username) # username是子用户的用户名
login(request, user)
具体参见:https://docs.djangoproject.com/en/dev/howto/auth-remote-user/
|
Django ModelAdmin 筆記 |
django |
http://gibuloto.com/blog/django-modeladmin/ |
from django.contrib import admin
# 如果有用到 GeoDjango 的東西就要用這個
# from django.contrib.gis import admin
from app_product.models import Product
class ProductrandAdmin(admin.ModelAdminn):
'''
以下屬於 change list
列表頁
'''
# 要顯示 model 的哪些欄位,要注意的是 ManyToManyField 沒辦法在列表頁顯示
list_display = ('id', 'nameusertionbrands, 'category', 'price'ite')
# 哪些欄位是可以點擊的,點了就會到編輯頁
list_display_links = list_display
'''
可以直接在列表頁編輯
不是所有的 field 都支援,像是 DateTimeField 就不支援,但是 ForeignKey 可以
不能跟 list_display_links 同時使用
'''
# list_editable = ('name',)
# 自定 filter
# https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
list_filter = ('category', 'brand', 'stores')
# 只適用 ManyToManyField,該欄位會變成左右兩欄的多選框
filter_horizontal = ('stores',)
# 這裡的 ordering 不同於 model 的 ordering,只作用在 admin 的 change list
ordering = ('-add_time',)
# 默認就是 case-insensitive
search_fields = ('name',)
# 決定列表頁要顯示哪些 obj
def queryset(self, request):
qs = super(ProductAdmin, self).queryset(request)
# 例如我們可以限定登入的用戶只能看到他自己上傳的商品
if request.user.is_superuser:
return qs
else:
return qs.filter(user = request.user)
'''
以下屬於 add / change
編輯頁
'''
# 因為 admin 後台只會顯示 editable = True 的欄位
readonly_fields = ('add_time',)
# 在視覺上將欄位分組
fieldsets = (
('必填', {
'fields': ('name', 'brand', 'category'),
}),
('選填', {
'fields': ('stores', 'price')
}),
)
# 確保 user 這個欄位只能是 logged-in user 本人,但是 superuser 無此限制
# https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if not request.user.is_superuser:
if db_field.name == 'user':
kwargs["queryset"] = User.objects.filter(id = request.user.id)
if db_field.name == 'brand':
kwargs["queryset"] = Brand.objects.filter(user = request.user)
return super(ProductAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
# https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_manytomany
def formfield_for_manytomany(self, db_field, request, **kwargs):
if not request.user.is_superuser:
if db_field.name == 'stores':
kwargs["queryset"] = Store.objects.filter(brand__user__id = request.user.id)
return super(ProductAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
#如何在 change list 中顯示縮圖
# 最後記得要 register 這個 ModelAdmin,該 model 才會出現在 admin 後台
admin.site.register(Product, ProductAdmin)
def show_image(self, obj):
try:
# image 是一個 ImageField
return '<img src="%s" width="48" height="48">' % obj.image.url
except:
pass
show_image.allow_tags = True
show_image.short_description = '商品圖' # 顯示在 list_display 的標題
# 然後把該 method 的名字加入 list_display
list_display = ('id', 'show_image', 'name', 'user', 'brand', 'category', 'price')
|
每台电脑的唯一标识符 |
python, uuid |
|
>>> import uuid
>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')
>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')
>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')
>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'
>>> # get the raw 16 bytes of the UUID
>>> x.bytes
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')
|
IE内存泄露,iframe内存泄露造成的原因和解决方案 |
|
http://my.oschina.net/jsan/blog/11169 |
var frame = $('iframe');
frame[0].contentWindow.document.write('');//清空iframe的内容
frame[0].contentWindow.close();//避免iframe内存泄漏
frame.remove();//删除iframe
|