【DRF】教程(1)

Django-Rest 入门教程

环境

# windows
python version python3.7
django version 4.1
django-rest-framewrok 4.1

下载

pip install markdown                           # API 的 Markdown 的支持 version 3.4.3
pip install djangorestframework==3.14.0
pip install django==3.2.19 
pip install django-filter                      # 过滤支持   version 23.2

创建程序

# windows  win+r 打开终端
# 创建项目
django-admin startproject DjangoRestDemo
# 创建一个应用
cd DjangoRestDemo
python manage.py startapp appdemo
​
​
# 现在的目录是这样的
/*
+--- DjangoRestDemo
|   +--- appdemo
|   |   +--- admin.py
|   |   +--- apps.py
|   |   +--- migrations
|   |   |   +--- __init__.py
|   |   +--- models.py
|   |   +--- tests.py
|   |   +--- views.py
|   |   +--- __init__.py
|   +--- DjangoRestDemo
|   |   +--- asgi.py
|   |   +--- settings.py
|   |   +--- urls.py
|   |   +--- wsgi.py
|   |   +--- __init__.py
|   |   +--- __pycache__
|   |   |   +--- settings.cpython-37.pyc
|   |   |   +--- __init__.cpython-37.pyc
|   +--- manage.py
*/

配置

# 配置
DjangoRestDemo/DjanoRestDemo/setttings.py
​
# 添加如下内容。。。
INSTALLED_APPS = [
    ....
    'rest_framework', 
    'appdemo.apps.AppdemoConfig',
]

启动

# 要在 manage.py 同级目录启动 DjangoRestDemo 下启动
​
python manage.py runserver
​
​
启动之后, 浏览器访问 http://127.0.0.1:8000/
# 你会看到一个火箭, 提示你 Django 创建成功

创建表

# /appdemo/models.py
​
# 添加如下内容
​
from django.db import models
​
class User(models.Model):
    GENDER_CHOICES = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
    u_name = models.CharField(max_length=20, unique=True, verbose_name='用户名称')
    u_password = models.CharField(max_length=255, verbose_name='用户密码')
    u_phone = models.CharField(max_length=11, verbose_name='用户手机号')
    u_age = models.IntegerField(verbose_name='用户年龄')
    u_gender = models.CharField(max_length=2, choices=GENDER_CHOICES, verbose_name='用户性别')

生成表

# 打开终端
# 我这里使用的是 sqlite3 所以没有配置数据库连接  sqlite3 是自带的,也不需要创建!
# 生成 models 的迁移文件
python manage.py makemigrations
/*
Migrations for 'appdemo':
  appdemo\migrations\0001_initial.py
    - Create model User
*/
# 将迁移文件同步到数据库中
python manage.py migrate
​
/*
​
Operations to perform:
  Apply all migrations: admin, appdemo, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  .....
*/

创建第一个 Views

# 在 appdemo/views.py
# 添加如下入内
​
from rest_framework.views import APIView
from rest_framework.response import Response
​
class IndexViews(APIView):
    def get(self, request, *args, **kwargs):
        return Response('Test, Index, Views')

配置路由

# /DjangoRestDemo/DjangoRestDemo/urls.py
# 增加如下内容:
from appdemo.views import IndexViews
urlpatterns = [
	...
    path('', IndexViews.as_view())
]

# 启动
python manage.py runserver
# 浏览器访问 http://127.0.0.1:8000/

# 如果出现 Django REST framework 画面表示成功 并且浏览器上面有这句话 'Test, Index, Views'

对User表进行 APIView CURD(增删改查)

新增加序列化器

# 创建文件 appdemo/serializers.py
# 添加如下内容
#  -*- coding: utf-8 -*-
from appdemo.models import User
from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

增查

# 在 appdemo/views.py
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_201_CREATED, HTTP_400_BAD_REQUEST
from rest_framework.views import APIView

from appdemo.models import User
from appdemo.serializers import UserSerializer


class UserViewApi(APIView):
    def get(self, request, *args, **kwargs):
        """
        user:  是一个 QuerySet 对象!
        序列化: 将一个 QuerySet 变为一个可以传递给前端的数据、
        many=True 表示有多条数据 默认为 False 表示单条数据!
        """
        user = User.objects.all()
        if user.exists():
            """ 
            UserSerializer       进行序列化!
            user_serializer.data 这个就是传递给前端的值
            type:  <class 'rest_framework.utils.serializer_helpers.ReturnList'>
            """
            user_serializer = UserSerializer(user, many=True)
            print(type(user_serializer.data))
            data = {"msg": "get user info success",
                    "status": HTTP_200_OK,
                    "user_list": user_serializer.data,
                    }
            return Response(data)
        else:
            return Response(data={
                "msg": "is null",
                "status": HTTP_404_NOT_FOUND
            }, )

    def post(self, request, *args, **kwargs):
        """
        反序列化: 将获取的转为python对象
        """
        user_serializer = UserSerializer(data=request.data)
        # is_valid 校验数据是否合法!
        if user_serializer.is_valid():
            # save 保存数据到数据库中!
            user_serializer.save()
            return Response(status=HTTP_201_CREATED, data=user_serializer.data)
        return Response(data={"msg": "create Error", "status": HTTP_400_BAD_REQUEST})

添加路由

# /DjangoRestDemo/DjangoRestDemo/urls.py
# 注意:这里已经把 Index 的路由已经删掉了。。
# 增加如下内容:
from appdemo.views import UserViewApi
urlpatterns = [
    path('', UserViewApi.as_view())
]

# 浏览器访问:
http://127.0.0.1:8000/
# 提交 post 请求, 使用 postman, 或者 http://127.0.0.1:8000/ rest 的 application/json 提交表单数据
# 测试数据
{   
    "u_name": "snake",
    "u_password": "123456",
    "u_phone": "110",
    "u_age": 12,
    "u_gender": "M"
}

新增

查询

修改

# 这里我没有拆分写 要获取用户的id,所以, 要修改一下路由。
class UserViewApi(APIView):
    ....
    # 修改
    def put(self, request, pk, *args, **kwargs):
        try:
            user = User.objects.get(id=pk)
        except ObjectDoesNotExist:
            return Response({'error': 'User not found'}, status=HTTP_404_NOT_FOUND)
        serializer = UserSerializer(instance=user, data=request.data)
        if serializer.is_valid():
            serializer.save()
        return Response({"msg": " update successful", "status": HTTP_201_CREATED, "data": user.u_name})

# /DjangoRestDemo/DjangoRestDemo/urls.py
from appdemo.views import UserViewApi
urlpatterns = [
    path('<int:pk>', UserViewApi.as_view())
]

先查询原先的数据是什么

修改u_name

在查询一下, 看一下有没有修改

修改不存在的 id 会提示用户不存在.

删除数据

from django.core.exceptions import ObjectDoesNotExist
from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK, HTTP_404_NOT_FOUND, HTTP_201_CREATED, HTTP_400_BAD_REQUEST, \
    HTTP_204_NO_CONTENT
from rest_framework.views import APIView

from appdemo.models import User
from appdemo.serializers import UserSerializer


class UserViewApi(APIView):
   ...
    # 删除
    def delete(self, request, pk, *args, **kwargs):
        try:
            user = User.objects.get(id=pk)
        except ObjectDoesNotExist:
            return Response({'error': 'User not found'}, status=HTTP_404_NOT_FOUND)
        user.delete()
        return Response({"status": HTTP_204_NO_CONTENT, "msg": "del successful", "id": user.id})

删除id=6数据之后, 在进行删除 就会提示, 用户没有找到!

以上就是 Rest APIView 对用户表的, 增删改查

postman 下载地址:Download Postman | Get Started for Free

后续会针对 user 表, 进行展开深入了解

笔记截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值