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)
]))