a very light django plugin
Project description
Django Render
=============
0. [开始](#0-开始)
1. [简介](#1-简介)
2. [安装](#2-安装)
3. [用法](#3-用法)
4. [注意](#4-注意)
5. [交流](#5-交流)
6. [联系](#6-联系)
7. [待续](#7-待续)
##0. 开始
一个非常轻量的 Django URL 装饰器
```python
from django_render.annotations import *
@url(r'^/index ')
def link(request):
...
return True
```
在views 是一个package 的情况下,可以使用url自动扫描:
```python
from django_render.url_patterns_maker import urlpatterns_maker
urlpatterns = urlpatterns_maker()
```
上面的代码放到views/\_\_init\_\_.py 中, 就可以自动将views/下面其他的python file name 作为url 的一级目录。如果有特殊名字映射需求可以如下写法:
```python
from django_render.url_patterns_maker import urlpatterns_maker
urlpatterns = urlpatterns_maker(default='^', profile='^my/')
```
等同于如下写法:
```python
urlpatterns = patterns('',
url(ur'^', include('chooper_api.views.default')),
url(ur'^my/', include('chooper_api.views.profile')),
url(ur'^friend/', include('chooper_api.views.friend')),
url(ur'^feed/', include('chooper_api.views.feed')),
)
```
note that unspecified views(friend.py and feed.py here) got their file name(without extension,
and surrounded by '^' and '/') as the url regex
定义 GET|POST /index:
```python
@url(r'^/index ', method=M.GET)
```
定义 POST|PUT /name:
```python
@url(r'^/name ', method=M.POST)
def post_name(request):
...
@url(r'^/name ', method=M.GET)
def get_blog_list(request):
...
@url(r'^/blog/(?P<id>\d+) ', method=M.POST)
@post(text=str)
def post_a_blog(request, text):
...
@url(r'^/blog/(?P<id>\d+) ')
@login_required(read_user_interceptor=read_user_interceptor)
def hello(request, user):
'''
@param request: MUST BE EXIST!
@param user: MUST BE EXIST!
'''
return True, {'user': user.name}
```
全局定义 read_user_interceptor:
```python
#in settings.py
from django_render
def read_user_interceptor(request):
...
if success:
return user
else:
return None
django_render.global_read_user_interceptor = read_user_interceptor
## in views.py
@login_required
```
如果是Ajax类型的请求
```python
@login_required(is_ajax=True)
#如果登录失败,不会跳转到 login page, 而是返回 {'rt':false, 'message':'login first'}
```
##4. 注意
> @url() 并不是真正 django 的 url 方法,但因为是在基础上的封装,所以 django url 的其他用法 @url() 也同样支持
##5. 交流
* mail list: django-render@googlegroups.com
* qq group id: 7790075
##6. 联系
* email: i@wangtai.me
* twitter: wang_tai
##7. 待续
1. 自动识别google-protobuf
2. 支持 Form, Ajax 使用 PUT/DELETE/...
=============
0. [开始](#0-开始)
1. [简介](#1-简介)
2. [安装](#2-安装)
3. [用法](#3-用法)
4. [注意](#4-注意)
5. [交流](#5-交流)
6. [联系](#6-联系)
7. [待续](#7-待续)
##0. 开始
一个非常轻量的 Django URL 装饰器
```python
from django_render.annotations import *
@url(r'^/index
def link(request):
...
return True
```
在views 是一个package 的情况下,可以使用url自动扫描:
```python
from django_render.url_patterns_maker import urlpatterns_maker
urlpatterns = urlpatterns_maker()
```
上面的代码放到views/\_\_init\_\_.py 中, 就可以自动将views/下面其他的python file name 作为url 的一级目录。如果有特殊名字映射需求可以如下写法:
```python
from django_render.url_patterns_maker import urlpatterns_maker
urlpatterns = urlpatterns_maker(default='^', profile='^my/')
```
等同于如下写法:
```python
urlpatterns = patterns('',
url(ur'^', include('chooper_api.views.default')),
url(ur'^my/', include('chooper_api.views.profile')),
url(ur'^friend/', include('chooper_api.views.friend')),
url(ur'^feed/', include('chooper_api.views.feed')),
)
```
note that unspecified views(friend.py and feed.py here) got their file name(without extension,
and surrounded by '^' and '/') as the url regex
定义 GET|POST /index:
```python
@url(r'^/index
```
定义 POST|PUT /name:
```python
@url(r'^/name
def post_name(request):
...
@url(r'^/name
def get_blog_list(request):
...
@url(r'^/blog/(?P<id>\d+)
@post(text=str)
def post_a_blog(request, text):
...
@url(r'^/blog/(?P<id>\d+)
@login_required(read_user_interceptor=read_user_interceptor)
def hello(request, user):
'''
@param request: MUST BE EXIST!
@param user: MUST BE EXIST!
'''
return True, {'user': user.name}
```
全局定义 read_user_interceptor:
```python
#in settings.py
from django_render
def read_user_interceptor(request):
...
if success:
return user
else:
return None
django_render.global_read_user_interceptor = read_user_interceptor
## in views.py
@login_required
```
如果是Ajax类型的请求
```python
@login_required(is_ajax=True)
#如果登录失败,不会跳转到 login page, 而是返回 {'rt':false, 'message':'login first'}
```
##4. 注意
> @url() 并不是真正 django 的 url 方法,但因为是在基础上的封装,所以 django url 的其他用法 @url() 也同样支持
##5. 交流
* mail list: django-render@googlegroups.com
* qq group id: 7790075
##6. 联系
* email: i@wangtai.me
* twitter: wang_tai
##7. 待续
1. 自动识别google-protobuf
2. 支持 Form, Ajax 使用 PUT/DELETE/...