一分钟学会Django跨域、DRF、连接数据库、以及增删改查分页

 1、配置INSTALLED_APPS 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders', #跨域 cors
    'myapp',  #项目app
    'rest_framework',  #DRF配置
    'django_filters', #Django 筛选查询
]

 2、配置MIDDLEWARE

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',   #在此处添加新的配置
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',   #注释原有配置
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

3、分页

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
    'DEFAULT_PAGINATION_CLASS':  'utils.pagination.MyPageNumberPagination', #重写的路径
    # 'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    # 'PAGE_SIZE': 2  # 每页数目
}

4、链接mysql数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #链接数据库
        'NAME': 'name', #链接的库名
        'USER': 'root', #root本地
        'HOST': '127.0.0.1', #端口
        'PASSWORD': '******', #密码
    }
}

5、添加最后一条代码实现跨域

CORS_ORIGIN_ALLOW_ALL = True

6、在django中添加图片

首先配置settings.py

import os
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
MEDIA_URL = "uploads/"
MEDIA_ROOT = os.path.join(BASE_DIR, "static\\uploads")

其次在urls文件中添加路径

urlpatterns = [
    re_path(r'^uploads/(?P<path>.*)$', serve,{"document_root": settings.MEDIA_ROOT}),
]

7、DRF的基本使用

创建一个py文件 命名为serializers.py

models.py基本代码如下:

from django.db import models

# Create your models here.


class Good(models.Model):
    gname = models.CharField(max_length=33)
    filtername = models.CharField(max_length=33)
    imgs = models.ImageField(upload_to='good/')

    def __str__(self):
        return self.gname

    class Meta:
        db_table = 'good'


class Isshow(models.Model):
    iname = models.CharField(max_length=33)

    def __str__(self):
        return self.iname

    class Meta:
        db_table = 'isshow'

serializers.py基本代码如下:

from django.db import models

# Create your models here.




class Role(models.Model):
    role_name = models.CharField(max_length=32)
    def __str__(self):
        return self.role_name
    class Meta:
        db_table='role'



class AdminUser(models.Model):
    username = models.CharField(max_length=32)
    email = models.EmailField()
    password = models.CharField(max_length=64)
    state = models.BooleanField(default=False)
    role = models.ForeignKey(to=Role,on_delete=models.CASCADE,null=True,default=None)
    def __str__(self):
        return self.username
    class Meta:
        db_table='adminusers'
        ordering=('-id',)


配置views.py文件 实现基本功能

from django.db.models import Q
from rest_framework.viewsets import ModelViewSet
from rest_framework.generics import ListAPIView
from .models import *
from .serializers import *
# from rest_framework.decorators import action



 
class RoleView(ListAPIView):
    queryset = Role.objects.all()
    serializer_class = RoleSerializer
    pagination_class = None

class AdminUserViewSet(ModelViewSet):
    queryset = AdminUser.objects.all()
    serializer_class = AdminUserSerializer
    # pagination_class = None

    def get_queryset(self):
        keyword = self.request.query_params.get('keyword')
        queryset = self.queryset
        if keyword is not None:
            queryset = queryset.filter(Q(username__contains=keyword)|Q(email__contains=keyword))
        return queryset.all()

配置路由 urls.py

from django.contrib import admin
from django.urls import path
from myapp.views import *
from rest_framework import routers

router = routers.SimpleRouter(trailing_slash=False)
router.register('users',AdminUserViewSet,basename='users')
urlpatterns+=router.urls

8、重写分页 代码 对应settings.py中的配置

新建文件pagination.py

from collections import OrderedDict
from rest_framework.response import Response
from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):
    page_size = 3
    page_query_param = "pagenum"
    page_size_query_param = "pagesize"

    max_page_size = 50

    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值