Django 进阶教程笔记(一)

自定义标签

app/templatetags (包含 __init__.py)
# poll_extras.py
方式一:@register.tag()
1,定义节点类的 render 函数,返回输出内容,或者复制给 context 变量
2,定义标签函数,返回节点类
方式二:@register.assignment_tag()
1,定义函数,直接返回输出内容
# 将变量绑定到模板中一起输出
@register.inclusion_tag('res.html')

自定义过滤器

类似 自定义标签
定义函数,然后返回结果

@register.filter()
def my_filter(value, arg):
    return value.replace(arg, '')

@register.filter()
@stringfilter
def lower(value):
    return value.lower()

# 关于转义,默认情况下系统过滤器会自动进行转义,自定义的过滤器则不会转义而是输出原样
可以使用 is_safe=True 或者 make_safe()

Jinja2

自定义 manager (封装查询语句)

# models.py
class xxx:
  todoList = models.Manager()
# 方式一,自定义 Manager 里的 get_queryset 方法
# 方式二,自定义 Manager 里的 自定义方法
# 方式三,自定义 QuerySet 子类

自定义Form

集成已有数据库表

集成 Mongodb

使用多个数据库

  • 内容同入门教程的自定义验证

自定义 Field

admin 高级定制

# 中文界面:settings.py
MIDDLEWARES_CLASS=['django.middleware.locale.LocaleMiddleware']
确保在’django.contrib.sessions.middleware.SessionMiddleware’,之后即可
# 定制 User 表
from django.contrib.auth.admin import UserAdmin
admin.site.unregister(User)
@admin.site.register(User)
class MyUserAdmin(UserAdmin):
    list_display = ('name',)
# 定制编辑页模板
change_form_template = 'some.html' // 一个字段
# some.html
{% extends 'admin/change_form.html' %}
{% block form_top %}
    

Some Text

{% endblock %}

自定义 Admin Widget (字段控件)

自定义 Admin Actions (操作)

通用视图

View, RedirectView, TemplateView, ListViewDetailView, 
FormView, CreateView, UpdateView, DeleteView, 
Generic date views
# 使用:urls.py
url(r'^index',TemplateView.as_view(template_name='index.html')
# 自定义 View
class IndexView(TemplateView):
    template_name = 'index.html'
# 未完待续.... 
# 通用视图意义: 去除重复代码

Restful 框架

# 安装
pip install djangorestframework
# settings.py
APPS = [ 'rest_framework' ]
# serializers.py
class PoemSerializer(ModelSerializer):
    class Meta:
        model
        fields
# views.py
# 多个
class PoemListView(APIView)
    def get:
        return Response(serializer.data)
    def post:
        serializer.save()
        return Response(serializer.data, status)
# 一个
@api_view(['get', 'post', 'delete'])
def poem_detail(request, pk):
    if request.method == 'get'
    elif
    else
    return Response(serializer.data)

你可能感兴趣的:(Django 进阶教程笔记(一))