首页 > 代码库 > 重新实践《轻量级DJANGO》这本书
重新实践《轻量级DJANGO》这本书
从手到尾,手写的DJANGO,不借助命令,效果一样的呢。
import osimport sysimport hashlibfrom django.conf import settingsDEBUG = os.environ.get(‘DEBUG‘, ‘on‘) == ‘on‘SECRET_KEY = os.environ.get(‘SECRET_KEY‘, ‘%jv_4#hoaqwig2gu!eg#^ozptd*a@88u(aasv7z!7xt^5(*i&k‘)ALLOWED_HOSTS = os.environ.get(‘ALLOWED_HOSTS‘, ‘localhost‘).split(‘,‘)BASE_DIR = os.path.dirname(__file__)settings.configure( DEBUG=DEBUG, TEMPLATE_DEBUG = True, SECRET_KEY=SECRET_KEY, ALLOWED_HOSTS=ALLOWED_HOSTS, ROOT_URLCONF=__name__, MIDDLEWARE_CLASSES=( ‘django.middleware.common.CommonMiddleware‘, ‘django.middleware.csrf.CsrfViewMiddleware‘, ‘django.middleware.clickjacking.XFrameOptionsMiddleware‘, ), INSTALLED_APPS=( ‘django.contrib.staticfiles‘, ), TEMPLATES = [ { ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘, ‘DIRS‘: [ os.path.join(BASE_DIR,‘templates‘).replace(‘\\‘, ‘/‘), ], ‘APP_DIRS‘: True, } ], STATICFILES_DIRS=( os.path.join(BASE_DIR, ‘static‘), ), STATIC_URL=‘/static/‘,)from django import formsfrom django.conf.urls import urlfrom django.core.urlresolvers import reversefrom django.core.cache import cachefrom django.core.wsgi import get_wsgi_applicationfrom django.http import HttpResponse, HttpResponseBadRequestfrom django.shortcuts import renderfrom django.views.decorators.http import etagfrom io import BytesIOfrom PIL import Image, ImageDrawclass ImageForm(forms.Form): height = forms.IntegerField(min_value=http://www.mamicode.com/1, max_value=2000) width = forms.IntegerField(min_value=http://www.mamicode.com/1, max_value=2000) def generate(self, image_format=‘PNG‘): """Generate an image of the given type and return as raw bytes.""" height = self.cleaned_data[‘height‘] width = self.cleaned_data[‘width‘] key = ‘{}.{}.{}‘.format(width, height, image_format) content = cache.get(key) if content is None: image = Image.new(‘RGB‘, (width, height)) draw = ImageDraw.Draw(image) text = ‘{} X {} demo‘.format(width, height) textwidth, textheight = draw.textsize(text) if textwidth < width and textheight < height: texttop = (height - textheight) // 2 textleft = (width - textwidth) // 2 draw.text((textleft, texttop), text, fill=(255, 155, 5)) content = BytesIO() image.save(content, image_format) content.seek(0) cache.set(key, content, 60 * 60) return contentdef generate_etag(request, width, height): content = ‘Placeholder: {0} x {1}‘.format(width, height) return hashlib.sha1(content.encode(‘utf-8‘)).hexdigest()@etag(generate_etag)def placeholder(request, width, height): form = ImageForm({‘height‘: height, ‘width‘: width}) if form.is_valid(): image = form.generate() return HttpResponse(image, content_type=‘image/png‘) else: return HttpResponseBadRequest("Invalid Image Request")def index(request): example = reverse(‘placeholder‘, kwargs={‘width‘: 500, ‘height‘: 500}) print example, ‘#####################‘ context = { ‘example‘: request.build_absolute_uri(example) } print context, ‘@@@@@@@@@@@@@@@@@@@@@@@‘ return render(request, ‘home.html‘, context)urlpatterns = ( url(r‘^image/(?P<width>[0-9]+)x(?P<height>[0-9]+)/$‘, placeholder, name=‘placeholder‘), url(r‘^$‘, index, name=‘homepage‘),)application = get_wsgi_application()if __name__ == "__main__": from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)
重新实践《轻量级DJANGO》这本书
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。