Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
Tips:Python的Web开发框架除了Django,还有Flask和Tornado等。
输入如下命令即可安装Django,注意需要提前配置好Python环境,这里选择的django版本是2.0.3版本,
pip install django
安装校验:在Windows命令提示符下输入django-admin命令回车。
提示如下内容则说明安装成功
C:\Users\Shuqing>django-admin
Type 'django-admin help <subcommand>' for help on a specific subcommand.
Available subcommands:
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.)
Django REST Framework,是一套基于Django的REST风格的框架。
官方主页:http://www.django-rest-framework.org
pip install djangorestframework #Django REST Framework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
当Django REST Framework安装好之后,创建一个新的项目django_restful,如下命令所示我是创建在D盘根目录。在项目下创建api应用
C:\Users\Shuqing>d:
#创建一个新的项目
D:\>django-admin startproject django_restful
进入项目django_restful创建api应用,创建完成之后可以看到项目文件夹下面多了一个api文件夹
D:\>cd django_restful
D:\django_restful>python manage.py startapp api
进入到D:\django_rest\django_restful目录,打开settings.py在项目下创建api和rest_framework。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'api',
]
rest_framework权限配置
默认的权限策略可以设置在全局范围内,通过DEFAULT_PERMISSION_CLASSES设置。在该文件末尾添加如下内容:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
然后通过命令migrate命令进行数据库迁移。
D:\django_restful>python manage.py migrate
执行之后看到如下提示说明迁移成功
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sessions.0001_initial... OK
使用createsuperuser命令来创建超级管理员账户,密码至少8位数字和字母组合。如51zxw20182018
D:\django_rest>python manage.py createsuperuser
Username (leave blank to use 'shuqing'): 51zxw
Email address: 51zxw@163.com
Password:
Password (again):
Superuser created successfully.
启动django,然后验证登录我们创建的超级管理员账户。
D:\django_rest>python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
July 20, 2018 - 16:01:39
Django version 2.0.7, using settings 'django_rest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
启动成功之后,输入地址:http://127.0.0.1:8000/ 我们可以看到如下页面:

Tips:也可以自定义host和port,如下所示:
python manage.py runserver 127.0.0.1:8001
我们再输入地址:http://127.0.0.1:8000/admin 即可进入到登录超级管理员账户界面:

登录我们创建的账户,可以看到如下界面:

Serializers用于定义API的表现形式,如返回哪些字段、返回怎样的格式等。这里序列化Django自带的User和Group。创建数据序列化,在api应用下创建serializers.py文件。

序列化代码如下:
serializers.py
from django.contrib.auth.models import User,Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model=User
fields=('url','username','email','groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model=Group
fields=('url','name')
视图用于如何向用户展示数据,展示哪些数据。比如用户查询User信息或查询Group信息,那么程序内部要定义好怎么去查询。在Django REST framework中,ViewSets用于定义视图的展现形式,例如返回哪些内容,需要做哪些权限处理。
打开api应用下的views.py文件,编写如下代码:
views.py
from django.shortcuts import render
from django.contrib.auth.models import User,Group
from rest_framework import viewsets
from api.serializers import UserSerializer,GroupSerializer
# Create your views here.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
在URL中会定义相应的规则到ViewSets。ViewSets则通过serializer_class找到对应的Serializers。
这里将User和Group的所有对象赋予queryset,并返回这些值。在UserSerializer和GroupSerializer中定义要返回的字段。
打开.../django_rest/urls.py文件,添加api的路由配置。
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from rest_framework import routers
from api import views
router=routers.DefaultRouter()
router.register(r'users',views.UserViewSet)
router.register(r'groups',views.GroupViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(router.urls)),
path('api-auth/',include('rest_framework.urls',namespace='rest_framework')),
]
注意:Django1.0和2.0关于路由配置写法有一些区别,使用1.0路由配置如下
from django.conf.urls import url
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^',include(router.urls)),
url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')),
]
启动服务,然后在浏览器打开:http://127.0.0.1:8000/ 即可看到API主页,如下所示:

点击主页右上角的Log in登录超级管理员账户,然后分别创建Group和User数据。

Tips: Vary: Accept标头可告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题。
