目录结构
一、Django数据库配置
1.数据库迁移
2.创建超级管理员
二、启动Django Server
1.启动Django服务
2.访问Django,验证数据库配置效果
三、数据序列化
四、Django视图创建
五、Django URL路由配置
六、Django API编辑
1.访问Groups页面
2.访问Users页面
一、Django数据库配置
1.数据库迁移
切换到项目目录D:\CI_Env\Django_Restful
执行命令:
python manage.py migrate
迁移OK,在当前项目目录下生成了一个db.sqlite3
数据库文件
2.创建超级管理员
超管账户的密码要求:位数>=8,(数字+字母)组合
python manage.py createsuperuser
创建账户信息可根据各自不同设置,本次如下:
Username: admin
Email address: [email protected]
Password: admin123
Password(again): admin123
Bypass password validation and create user anyway? [y/N]: y
二、启动Django Server
1.启动Django服务
python manage.py runserver
2.访问Django,验证数据库配置效果
1)访问Django前台页面
URL:http://127.0.0.1:8000/
以上,也可以自定义host、port号,如:
python manage.py 127.0.0.1:8001
2)登录Django管理后台
URL:http://127.0.0.1:8000/admin/
2个表:Users、Groups
可以查看用户,修改用户信息
三、数据序列化
Serializers用于定义API的表现形式,如:返回的字段、数据格式等
本次需要序列化Django自带的User、Group表,相当于是对数据库表设计的初始化。创建数据序列化,需要在API应用(路径:...\Django_Restful\API
)下创建 serializers.py 文件,编写代码:
# 导入系统自带的2个表:User,Group
from django.contrib.auth.models import User,Group
# 导入serializers模块
from rest_framework import serializers
# 创建User序列化类,继承内置的方法;定义Users表的相关字段
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta: # 元类
model = User # 指向前端首页的Users表
fields = ('url','username','email','groups') # 配置Users表字段
# (Users表中的'groups'字段是关联到Groups表的'name'字段)
# 创建Group序列化类;定义Groups表的相关字段
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group # 指向Groups表
fields = ('url','name') # 此处url字段与Users表中的url字段一致(匹配API的url)
四、Django视图创建
创建视图:视图用于向用户展示数据,如:用户查询User、Group信息,而程序内部需要定义查询信息的规则。在Django REST Framework中,viewsets用于定义视图的表现形式,如:返回的内容、需要做的权限处理。
打开API应用(路径:...\Django_Restful\API
)下的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.
# viewsets通过serializer_class找到对应的serializers
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all() # 将User的所有对象赋给queryset,并返回对应值
serializer_class = UserSerializer # 指向UserSerializer(返回定义的字段)
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
五、Django URL路由配置
在目录(...\Django_Restful\Django_Restful\
)下打开 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) # 调用register方法,配置Users的路由
router.register(r'groups',views.GroupViewSet) # 配置Groups路由
# 配置url
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(router.urls)), # 代表位于根路径的主域名(http://127.0.0.1:8000)
# api-auth对应授权登录url
path('api-auth/',include('rest_framework.urls',namespace='rest_framework'))
]
以上配置完成,启动Django服务的情况下,再次访问Django主页(http://127.0.0.1:8000/),即可查看到显示为API的根路径。
此时,HTTP状态码为403(服务器拒绝请求访问),是因为没有登录管理员账户,无权限查看返回的配置数据。
点击右上角【Log in】,跳转至登录页面,对应url结构中出现了之前路由配置所设置的 'api-auth/'
登录超级管理员账户之后,即可查看到HTTP状态码为200,同时也返回了之前路由配置Users和Groups的url
GET /
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"users": "http://127.0.0.1:8000/users/",
"groups": "http://127.0.0.1:8000/groups/"
}
六、Django API编辑
参考以上第三步中数据序列化设置的代码,所定义Users表和Groups表的字段如下:
1.访问Groups页面
URL:http://127.0.0.1:8000/groups/
此时,Groups表中name字段并未设置任何字段值,故响应数据中为空
设置name字段值
准备2组值,每个值选择分别一种方式设置"name":
"Tester"
"Developer"
- 方式①:通过HTML form输入提交
- 方式②:通过Raw data数据设置提交
查看所有设置的name字段值,如下:
2.访问Users页面
URL:http://127.0.0.1:8000/users/
此时,Users表的groups字段区域,已展示出以上在Groups表中设置的2个name字段值("Tester"、"Developer"),调用到此处作为groups字段的选择项
同样可以采用两种方式添加2个用户的信息
查看Users表中所有添加的用户信息,除了超级管理员(admin),还有新增的2个用户(Test00001、Test00002),如下: