Skip to content

Instantly share code, notes, and snippets.

@pylemon
pylemon / get_current_url.py
Created April 5, 2012 06:45
django: get current url within template
## views.py
from django.shortcuts import render_to_response
from django.template.context import RequestContext
def home(request):
return render_to_response('home.html', {},
context_instance=RequestContext(request))
## don't forget RequestContext, that makes request var can be used in templates
@pylemon
pylemon / betterpaginator.py
Created April 7, 2012 15:54
django: better paginator
from django.core.paginator import Paginator, EmptyPage
class BetterPaginator(Paginator):
"""An enhanced version of the Paginator"""
def __init__(self, getvars, *args, **kwargs):
"""default args are:
self, object_list, per_page, orphans=0, allow_empty_first_page=True
@pylemon
pylemon / shanbay2.py
Created April 7, 2012 16:03
python: using mechanize to login shanbay.com
from mechanize import Browser
import json
LOGIN_URL = 'http://www.shanbay.com/accounts/login/'
USERNAME = ''
PASSWORD = ''
API = 'http://www.shanbay.com/api/word/'
def login(username=USERNAME, password=PASSWORD, login_url=LOGIN_URL):
print '[begin login]'
@pylemon
pylemon / using_request_post_or_none.py
Created April 7, 2012 16:34
django: using(request.POST or None) hack in views | advanced forms usage
# simple form usage in view
def my_view(request, template_name='home.html'):
# sticks in a POST or renders an empty form
form = MyForm(request.POST or None)
if form.is_valid():
do_something()
return redirect('/')
return render_to_response(template_name, {'form':form})
# form with files
@pylemon
pylemon / using_gist_in_emacs.md
Created April 7, 2012 16:52
github: using gist in emacs

gist-list usage:

g : reload the gist list from server
e : edit current gist description
k : delete current gist
+ : add a file to the current gist
- : remove a file from the current gist

C-x C-s : save a new version of the gist

C-x C-w : rename some file

@pylemon
pylemon / map_lambda_is_slow.py
Created April 13, 2012 01:54
python: map with lambda is slow
>>> import timeit
>>>
>>> data = 'data=xrange(1000000)'
>>>
>>> # be careful when using lambda with map
>>> timeit.timeit('map(lambda x:x*2, data)', data, number=20)
3.8384609954834
>>>
>>> # using list comprehension will be faster
>>> timeit.timeit('[i*2 for i in data]', data, number=20)
@pylemon
pylemon / forms.py
Created April 18, 2012 01:31
django: source code of usercreate form is awesome
class UserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and password.
"""
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
help_text = _("Enter the same password as above, for verification."))
@pylemon
pylemon / SQLStorage.py
Created May 5, 2012 10:50
python: sqlstorage dict orm
class SQLStorage(dict):
"""
a dictionary that let you do d['a'] as well as d.a
"""
def __getattr__(self, key): return self[key]
def __setattr__(self, key, value):
if self.has_key(key):
raise SyntaxError, 'Object exists and cannot be redefined'
self[key] = value
def __repr__(self): return '<SQLStorage ' + dict.__repr__(self) + '>'
@pylemon
pylemon / validate_code.py
Created May 9, 2012 01:13
django: validate code
#coding=utf-8
import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _numbers))
@pylemon
pylemon / pi.py
Created May 22, 2012 01:45
python: calculate the value of PI(pi)
#!/usr/bin/env python
def f((q, r, t, k)):
n = (3 * q + r) / t
if (4 * q + r) / t == n:
return (10 * q, 10 * (r - n * t), t, k, n)
else:
return (q * k, q * (4 * k + 2) + r * (2 * k + 1), t * (2 * k + 1), k + 1)
def pi(n = -1):