虚拟主机便宜电商seo优化
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:05
当前位置: 首页 > news >正文
虚拟主机便宜,电商seo优化,深圳网络有限公司有哪些,asp.net 网站截图用drf编写 1 有车型(CarModel)#xff0c;车厂#xff08;CarFactory#xff09;#xff0c;经销商(Distributor)三个表, 一个车厂可以生产多种车型#xff0c;一个经销商可以出售多种车型#xff0c;一个车型可以有多个经销商出售车型#xff1a;车型名#xff0c;车型…用drf编写 1 有车型(CarModel)车厂CarFactory经销商(Distributor)三个表, 一个车厂可以生产多种车型一个经销商可以出售多种车型一个车型可以有多个经销商出售车型车型名车型出厂价车厂id车厂车厂名车厂地址联系电话经销商经销商名地址联系电话 2 有用户表基于django内置user表扩展mobile字段 3 编写登陆接口jwt方式返回token格式为{status:100,msg:登陆成功tokensafasdfa} 4 所有接口除登录外必须登录后才能访问 5 管理员登陆后可以增删单查群查改 车型车厂经销商(具备所有接口权限) 6 普通用户登陆可以查看车型车厂经销商单条所有(只有查看权限) 7 所有查询所有接口带分页功能 8 查询所有车型接口可以按车型名字精准过滤加分项 用户注册接口 管理员有用户锁定删除用户功能models.py from django.db import modelsfrom django.contrib.auth.models import AbstractUserclass User(AbstractUser):mobile models.CharField(max_length32, verbose_name联系电话)# 车型 class CarModel(models.Model):name models.CharField(max_length32, verbose_name车型名)init_price models.IntegerField(verbose_name出厂价)factory models.ForeignKey(toCarFactory, on_deletemodels.CASCADE, verbose_name车厂id)distributors models.ManyToManyField(toDistributor, verbose_name经销商)class Meta:verbose_name_plural 经销商表def str(self):return self.namedef factory_info(self):车厂信息return {name: self.factory.name, addr: self.factory.addr, mobile: self.factory.mobile}def distributor_info(self):经销商信息distributor_info_list []for distributor in self.distributors.all():distributor_info_list.append({name: distributor.name, addr: distributor.addr,mobile: distributor.mobile})return distributor_info_list# 车厂 class CarFactory(models.Model):name models.CharField(max_length32, verbose_name车厂名)addr models.CharField(max_length32, verbose_name车厂地址)mobile models.CharField(max_length32, verbose_name联系电话)class Meta:verbose_name_plural 经销商表def str(self):return self.name# 经销商 class Distributor(models.Model):name models.CharField(max_length32, verbose_name经销商名)addr models.CharField(max_length32, verbose_name地址)mobile models.CharField(max_length32, verbose_name联系电话)class Meta:verbose_name_plural 经销商表def str(self):return self.name 新建一个jwt_response.py验证登录 def jwt_response_payload_handler(token, user, request):return {code: 100,msg: 登录成功,token: token}新建一个exceptions.py验证错误 from rest_framework.views import exception_handler from rest_framework.response import Responsedef common_exception(exc, context):res exception_handler(exc, context)if not res:return Response({code: 999, msg: f非drf错误错误信息是{str(exc)}})return Response({code: 666, msg: f这是drf错误错误信息是{res.data.get(detail)}}) settings.py配置文件中 JWT_AUTH {JWT_RESPONSE_PAYLOAD_HANDLER: app01.jwt_response.jwt_response_payload_handler,JWT_EXPIRATION_DELTA: datetime.timedelta(days1) }REST_FRAMEWORK {EXCEPTION_HANDLER: app01.exceptions.common_exception, }新建page.py分页 from rest_framework.pagination import PageNumberPaginationclass MyPageNumberPagination(PageNumberPagination):page_size 3 # 每页显示3条max_page_size 5 # 每页最大显示5条 新建serializer.py分页 from rest_framework import serializersfrom app01.models import User, CarModel, CarFactory, Distributorclass UserSerializer(serializers.ModelSerializer):class Meta:model Userfields [username, password, mobile]extra_kwargs {password: {write_only: True}}def create(self, validated_data):user User.objects.create_user(**validated_data)return userclass CarModelSerializer(serializers.ModelSerializer):class Meta:model CarModelfields [id, name, init_price, factory, distributors, factory_info, distributor_info]extra_kwargs {factory: {write_only: True},distributors: {write_only: True},factory_info: {read_only: True},distributor_info: {read_only: True},}class CarFactorySerializer(serializers.ModelSerializer):class Meta:model CarFactoryfields allclass DistributorSerializer(serializers.ModelSerializer):class Meta:model Distributorfields all 新建permission.py权限 from rest_framework.permissions import BasePermission from rest_framework.exceptions import AuthenticationFailedclass MyPermission(BasePermission):def has_permission(self, request, view):print(view.action)if not request.user.is_superuser and request.method ! GET:raise AuthenticationFailed(普通用户权限不足)return True views.py视图中 from rest_framework.viewsets import ViewSet from rest_framework.generics import GenericAPIView from rest_framework.mixins import CreateModelMixinfrom .models import User from .serializer import UserSerializerfrom rest_framework.response import Responseclass UserView(ViewSet, GenericAPIView, CreateModelMixin):queryset User.objects.all()serializer_class UserSerializerdef create(self, request, *args, **kwargs):ser self.get_serializer(datarequest.data)if ser.is_valid():ser.save()return Response({code: 100, msg: 注册成功, result: ser.data})return Response({code: 101, msg: 注册失败, result: ser.errors})from rest_framework.mixins import DestroyModelMixin from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework.permissions import IsAuthenticated, IsAdminUser from rest_framework.decorators import actionclass AdminView(ViewSet, GenericAPIView, DestroyModelMixin):queryset User.objects.all()authentication_classes [JSONWebTokenAuthentication]permission_classes [IsAuthenticated, IsAdminUser]# detailTrue 表示可以删除单个资源action(methods[DELETE], detailTrue)def delete_user(self, request, *args, **kwargs):return self.destroy(request, *args, **kwargs)action(methods[GET], detailTrue)def lock(self, request, *args, **kwargs):user self.get_object()if user is None:return Response({code: 101, msg: 用户不存在})if user.is_active:user.is_active Falseuser.save()return Response({code: 100, msg: 用户锁定成功})return Response({code: 102, msg: 用户已经被锁定})action(methods[GET], detailTrue)def unlock(self, request, *args, **kwargs):user self.get_object()if user is None:return Response({code: 101, msg: 用户不存在})if user.is_active is False:user.is_active Trueuser.save()return Response({code: 100, msg: 用户解锁成功})return Response({code: 102, msg: 用户已经解锁过了})from rest_framework.viewsets import ModelViewSetfrom .models import CarModel from .serializer import CarModelSerializer from .permissions import MyPermission from .page import MyPageNumberPaginationfrom django_filters.rest_framework import DjangoFilterBackendclass CarModelView(ModelViewSet):queryset CarModel.objects.all()serializer_class CarModelSerializer# 认证authentication_classes [JSONWebTokenAuthentication]# 权限permission_classes [IsAuthenticated, MyPermission]# 分页pagination_class MyPageNumberPagination# 过滤filter_backends [DjangoFilterBackend]filterset_fields [name]from .models import CarFactory from .serializer import CarFactorySerializerclass CarFactoryView(ModelViewSet):queryset CarFactory.objects.all()serializer_class CarFactorySerializerpagination_class MyPageNumberPaginationauthentication_classes [JSONWebTokenAuthentication]permission_classes [IsAuthenticated, MyPermission]from .models import Distributor from .serializer import DistributorSerializerclass DistributorView(ModelViewSet):queryset Distributor.objects.all()serializer_class DistributorSerializerpagination_class MyPageNumberPaginationauthentication_classes [JSONWebTokenAuthentication]permission_classes [IsAuthenticated, MyPermission] urls.py路由中 from django.contrib import admin from django.urls import path, includefrom rest_framework_jwt.views import obtain_jwt_tokenfrom rest_framework.routers import SimpleRouterfrom app01.views import UserView, AdminView, CarModelView, CarFactoryView, DistributorViewrouter SimpleRouter()router.register(user, UserView, user) router.register(admin, AdminView, admin)router.register(carMode, CarModelView, carMode) router.register(carFactory, CarFactoryView, carFactory) router.register(distributor, DistributorView, distributor)urlpatterns [path(login/, obtain_jwt_token),path(, include(router.urls)) ]
- 上一篇: 虚拟物品网站制作模板可以营销的十大产品
- 下一篇: 虚拟主机对网站seo有哪些影响四川建设信息网
相关文章
-
虚拟物品网站制作模板可以营销的十大产品
虚拟物品网站制作模板可以营销的十大产品
- 技术栈
- 2026年04月20日
-
虚拟网站建设做网页找什么公司
虚拟网站建设做网页找什么公司
- 技术栈
- 2026年04月20日
-
虚拟网站规划与设计济南建筑设计公司
虚拟网站规划与设计济南建筑设计公司
- 技术栈
- 2026年04月20日
-
虚拟主机对网站seo有哪些影响四川建设信息网
虚拟主机对网站seo有哪些影响四川建设信息网
- 技术栈
- 2026年04月20日
-
虚拟主机多个网站学建网站要多久
虚拟主机多个网站学建网站要多久
- 技术栈
- 2026年04月20日
-
虚拟主机多网站酷站 房地产的网站设计参 案例
虚拟主机多网站酷站 房地产的网站设计参 案例
- 技术栈
- 2026年04月20日
