混入视图基类 单表简化

1创建新项目的准备工作

1.1命令框内创建新项目

打开指定文件夹,在路径位置输入cmd打开命令行
django-admin startproject 项目名 创建项目

1.2在新项目内创建子应用

python manage.py startapp 子应用名

1.3注册子应用

在settings.py文件内注册子应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    '创建的子应用名'    #注册子应用
]

1.5配置数据库

在settings.py文件内

# 配置数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 使用mysql数据库
        'HOST': 'localhost',  # 主机
        'PORT': 3306,  		# 端口
        'USER': 'root',  	# 数据库的用户名
        'PASSWORD': '密码', # 数据库的密码
        'NAME': '创建的数据库名',  	# 数据库的名字
    }
}

1.6修改语言和时区

在settings.py文件内

LANGUAGE_CODE = 'zh-Hans'  #语言

TIME_ZONE = 'Asia/Shanghai'  #时区

1.7配置静态文件

在settings.py文件内

# 配置静态资源(现在基本上用不到)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]  #配置路径,在根目录创建文件夹

1.8常用的mysql代码语句

查看所有数据库: show databases;
创建数据库: create database 数据名 charset=utf8;
删除数据库: drop database 数据库名;
调用数据库: use 数据库名;
查看数据库下的所有表: show tables;
查看表结构: desc 表名;
查看表中的所有数据: select * from 表名;

1.9安装数据库

在跟项目名同名的文件夹内init.py文件里安装

import pymysql
pymysql.install_as_MySQLdb()

1.9.1创建模型类

在子应用文件夹里的models.py创建

# 模型类 会自动生成 id字段
class People(models.Model):
    name=models.CharField(max_length=20,verbose_name='姓名')
    sex=models.CharField(max_length=20,verbose_name='性别')
    money=models.IntegerField(verbose_name='身价')
    ranking=models.IntegerField(verbose_name='排名')
    class Meta:
        verbose_name='名人表'
        verbose_name_plural=verbose_name
        db_table='people'
    def __str__(self):
        return self.name

1.9.2创建好模型类后进行迁移

在项目内终端执行
生成迁移文件:python manage.py makemigrations
执行迁移:python manage.py migrate
如果迁移出错,把数据库删了创建新的数据库,生成的迁移文件也删了,重新执行上面2个步骤

1.9.3创建超级用户

创建超级用户 (python终端内运行)
python manage.py createsuperuser
电子邮件地址直接回车跳过
(前后密码要一致)
如果出现cryptography报错就python终端内安装
pip install cryptography

2.在子应用的admin.py文件中添加代码,注册表,不然admin控制台没办法管理这个表

from django.contrib import admin
#导包
from myapp.models import People  #models.py文件内创建的模型类名
# Register your models here.
admin.site.register(People)

3.运行项目,在admin页面添加数据

前后端分离

前端主要追求的是美观、流畅、兼容
后端追求的是三高,高性能、高并发、高可用

1GenericAPIView是什么

GenericAPIView继承自 APIVIew,增加了对于列表视图详情视图可能用到的通用支持方法*,通常使用时,可搭配一个或多个Mixin扩展类,来实现其他更加高级的功能,总结来说 GenericAPIView 是有关数据管理的基类,未来还会学习有关方法操作的基类

2.DRF工程

下载DRF工程第三方模块

在黑窗口内进行安装
pip install djangorestframework

在settings.py文件内注册

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '创建的子应用名',
    'rest_framework'  #注册
]

序列化器自动获取

在子应用中创建一个serializers.py文件写入类方法

#导包
from rest_framework import serializers
from myapp.models import People
  #模型序列化器
class PeopleSerializer2(serializers.ModelSerializer):
    class Meta:
        #指定模型类
        model=People
        #指定映射字段
        fields='__all__'

GenericAPIView

#使用GenericAPIView,实现增删改查
from rest_framework.response import Response
from myapp.models import People
from myapp.serializers import PeopleSerializer2
from rest_framework.generics import GenericAPIView
class Peopleview(GenericAPIView):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
    #获取全部人物信息
    def get(self,request):
        people=GenericAPIView.get_queryset(self)
        #people是要序列化的数据,many=True多个数据
        #使用序列化器,对数据进行序列化
        ser=GenericAPIView.get_serializer(self,instance=people,many=True)
        return Response(ser.data,status=200)
    #增加一个人物信息 反序列化  jsons数据->ORM格式数据
    def post(self,request):
        #使用序列化器进行反序列化
        ser=PeopleSerializer2(data=request.data)
        #判断但序列化是否成功
        #raise_exception=True如果出现异常,会抛出异常
        if ser.is_valid(raise_exception=True):
            #保存
            ser.save()
            return Response({'mag':'success'},status=201)
        return Response({'mag':'error'},status=200)
class Peopleview2(GenericAPIView):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
    #3.指定动态参数
    lookup_url_kwarg='id'
    #4.指定过滤的ORM字段
    lookup_field='id'
    #查询一个人物信息
    def get(self,request,id):
        try:
            peo_data = GenericAPIView.get_object(self)
        except Exception as a:
            print(a)
            #404数据不存在
            return Response({'msg':'error'},status=404)
        #对ORM操作查询到的数据进行序列化
        ser=GenericAPIView.get_serializer(self,peo_data)
        return Response(ser.data,status=200)
    #修改一个人物信息
    def put(self,request,id):
        try:
            peo_data = GenericAPIView.get_object(self)
        except Exception as a:
            print(a)
            # 404数据不存在
            return Response({'msg': 'error'}, status=404)
        #对更新的数据进行 反序列化
        #instance=peo_data,要修改的ORM对象(实例)
        #data=request.data,用于修改ORM对象的数据
        ser=GenericAPIView.get_serializer(self,instance=peo_data,data=request.data)
        #判断反序列化是否成功
        if ser.is_valid(raise_exception=True):
            #保存
            ser.save()
            #201添加/修改成功
            return Response({'msg':'success'},status=201)
        return Response({'msg':'error'},status=500)
    #删除一个人物信息
    def delete(self,request,id):
        try:
            GenericAPIView.get_object(self).delete()
        except Exception as e:
            print(e)
            #404数据不存在
            return Response({'msg':'error'},status=404)
        #204删除成功
        return Response({'msg':'success'},status=204)

混入类与GenericAPIView的组合使用

#使用GenericAPIView和混入类配合使用 实现增删改查
from myapp.models import People
from myapp.serializers import PeopleSerializer2
from rest_framework.mixins import ListModelMixin,CreateModelMixin,RetrieveModelMixin,\
    UpdateModelMixin,DestroyModelMixin
from rest_framework.generics import GenericAPIView
# 查询全部数据  添加数据
class Peopleview(GenericAPIView,ListModelMixin,CreateModelMixin):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
    #获取全部人物信息
    def get(self,request):
       return self.list(request)
    #增加一个人物信息 反序列化  jsons数据->ORM格式数据
    def post(self,request):
        return self.create(request)
# 获取单个数据  修改数据  删除数据
class Peopleview2(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
    #3.指定动态参数   #如果动态路由是<int:pk>,下面两句代码可以省略
    lookup_url_kwarg='id'
    #4.指定过滤的ORM字段
    lookup_field='id'
    #查询一个人物信息
    def get(self,request,id):
        return self.retrieve(request)
    #修改一个人物信息
    def put(self,request,id):
        return self.update(request)
    #删除一个人物信息
    def delete(self,request,id):
        return self.destroy(request)

使用拓展类实现增删查改

from myapp.models import People
from myapp.serializers import PeopleSerializer2
from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
# 查询全部数据  添加数据
class Peopleview(ListCreateAPIView):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
# 获取单个数据  修改数据  删除数据
class Peopleview2(RetrieveUpdateDestroyAPIView):
    #1.指定查询结果
    queryset = People.objects.all()
    #2.指定序列化器
    serializer_class = PeopleSerializer2
    #3.指定动态参数
    lookup_url_kwarg='id'
    #4.指定过滤的ORM字段
    lookup_field='id'

配置路由

# from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
    # path('admin/', admin.site.urls),
    path('mymodel/',views.PeopleView.as_view())
    path('mymodel/<int:id>/',views.Peopleview2.as_view())
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值