Django Components

Django的第三方组件也是非常丰富的,比如说Django rest framework,Gunicore等等之类,接下来会介绍几个自己常用的组件,希望能对你有所帮助。
你可以在这里查看所有的Django Package,使用方法是在输入框中输入关键字,下面就会展现搜索结果,看Search Weight为100%,点击进去,然后在右边中间的Documentation。

django-rest-framework


首当其冲介绍Django Rest Framework(DRF)是有原因的,现在前后端一般通过api进行交互,这是一个什么概念呢,如果能够DRF掌握好,那后台其实就差不多了。还是老样子,我们先去官方文档上看看,把上面的quickstart和6个部分都过一遍。在这里就不重复造轮子了,不过可以在这里找到我之前做的代码,参考一下。
DRF有几个非常好的特性,对于resource,serializer,renderer/parser, view 和 response的定义很清晰,又很符合Django的MTV模式(比如,它的view就是包装了Django的View实现的)。对于认证和授权有很好的支持,内置了一系列的Mixin,可以随意组装。最终用它来构建简单的一站式API构架,并且做出复杂的ReST结构。其Serializer,可以把model映射到其对应的一般化表示(JSON, XML之类的),其基于类的视图的扩展集也正符合API接口(endpoint)的需要。Serializer和基于类的视图扩展的清晰的分离是其精妙之处。同时,你也可以自定义URL而无需依赖自动生成,这也是DRF和其他构架(比如Tastypie或者是Piston)不同的地方。这些框架model到API接口的转换基本上都是自动的,这也就造成了灵活性的降低,限制了其在不同情况的使用(尤其是在认证和嵌套资源(nested resources)方面。构建REST API的优秀框架,可管理内容协商、序列化、分页等,开发者可以在浏览器中浏览构建的API

django-debug-toolbar


Django本身自带了非常友好的报错信息提示,但是如能加上django-debug-toolbar,就好像剑圣配上一把短刀,武功更加无敌。看过《剑雨》的朋友都知道,里面最牛逼的武器是剑配上短刀。安装配置都非常简单,还需要提到一点,这个工具在SQL查询时特别有用,DDT可以查询到每个特定的页面渲染所需要的时间,

django-allauth


可用于账号注册、管理和第三方社交账号的认证。配置也是非常的简单,记得参考文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'profiles',
'crispy_forms',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'stripe',

'rest_framework',
)

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'vita.urls'

WSGI_APPLICATION = 'vita.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

# Internationalization
# https://docs.djangoproject.com/en/1.7/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

STATIC_URL = '/static/'

TEMPLATE_DIRS = (os.path.join(os.path.dirname(BASE_DIR), 'static', 'templates'), )

if DEBUG:
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static", "static-only")
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static", "media")
STATICFILES_DIRS = (os.path.join(os.path.dirname(BASE_DIR), "static", "static"),


)

CRISPY_TEMPLATE_PACK = 'uni_form'


TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
'django.core.context_processors.request',
'django.core.context_processors.csrf')



AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',

'allauth.account.auth_backends.AuthenticationBackend',

)

SITE_ID = 1

LOGIN_URL = '/accounts/login/'
LOGIN_REDIRECT_URL = '/'

ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_CONFIRM_EMAIL_ON_GET = False
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = LOGIN_URL
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = None

ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 3
ACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_EMAIL_VERIFICATION = None
ACCOUNT_EMAIL_SUBJECT_PREFIX = "My subject: "
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "http"

ACCOUNT_LOGOUT_ON_GET = False
ACCOUNT_LOGOUT_REDIRECT_URL = "/"
ACCOUNT_SIGNUP_FORM_CLASS = None
ACCOUNT_SIGNUP_PASSWORD_VERIFICATION = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USER_MODEL_USERNAME_FIELD = "username"
ACCOUNT_USER_MODEL_EMAIL_FIELD = "email"

ACCOUNT_USERNAME_MIN_LENGTH = 5
ACCOUNT_USERNAME_BLACKLIST = []
ACCOUNT_USERNAME_REQUIRED = True
ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = False
ACCOUNT_PASSWORD_MIN_LENGTH = 6
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True

# test
STRIPE_SECRET_KEY = 'sk_test_K7H1k71vlT0rrLLCWdWI30k1'

STRIPE_PUBLISHABLE_KEY = 'pk_test_sBfSUMWlkN2fywRZgxCXnlkN'

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGE_SIZE': 10
}

django-crispy-forms


对django form在html页面呈现方式进行管理的一个第三方插件,说句实话,form module在Django里面是非常重要的。配置和使用都可以自己在网上搜索到。