当前位置: 首页 > news >正文

宁波最新发布百度官方优化软件

宁波最新发布,百度官方优化软件,广东贸易网站建设哪家,郑州网站建设哪家好用drf编写 1 有车型(CarModel),车厂(CarFactory),经销商(Distributor)三个表, 一个车厂可以生产多种车型,一个经销商可以出售多种车型,一个车型可以有多个经销商出售车型:车型名,车型…

用drf编写

'''
1 有车型(CarModel),车厂(CarFactory),经销商(Distributor)三个表,
一个车厂可以生产多种车型,一个经销商可以出售多种车型,一个车型可以有多个经销商出售车型:车型名,车型出厂价,车厂id车厂:车厂名,车厂地址,联系电话经销商:经销商名,地址,联系电话
2 有用户表,基于django内置user表,扩展mobile字段
3 编写登陆接口,jwt方式返回token,格式为{status:100,msg:登陆成功,token:safasdfa}
4 所有接口(除登录外),必须登录后才能访问
5 管理员登陆后可以增,删,单查,群查,改 车型,车厂,经销商(具备所有接口权限)
6 普通用户登陆可以查看车型,车厂,经销商单条,所有(只有查看权限)
7 所有查询所有接口带分页功能
8 查询所有车型接口,可以按车型名字精准过滤加分项:
用户注册接口
管理员有用户锁定,删除用户功能
'''

models.py

from django.db import modelsfrom django.contrib.auth.models import AbstractUserclass User(AbstractUser):mobile = models.CharField(max_length=32, verbose_name='联系电话')# 车型
class CarModel(models.Model):name = models.CharField(max_length=32, verbose_name='车型名')init_price = models.IntegerField(verbose_name='出厂价')factory = models.ForeignKey(to='CarFactory', on_delete=models.CASCADE, verbose_name='车厂id')distributors = models.ManyToManyField(to='Distributor', 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_length=32, verbose_name='车厂名')addr = models.CharField(max_length=32, verbose_name='车厂地址')mobile = models.CharField(max_length=32, verbose_name='联系电话')class Meta:verbose_name_plural = '经销商表'def __str__(self):return self.name# 经销商
class Distributor(models.Model):name = models.CharField(max_length=32, verbose_name='经销商名')addr = models.CharField(max_length=32, verbose_name='地址')mobile = models.CharField(max_length=32, 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(days=1)
}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 = '__all__'class 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(data=request.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]# detail=True 表示可以删除单个资源@action(methods=['DELETE'], detail=True)def delete_user(self, request, *args, **kwargs):return self.destroy(request, *args, **kwargs)@action(methods=['GET'], detail=True)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'], detail=True)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))
]

文章转载自:
http://wanjialignitize.ybmp.cn
http://wanjiadybbuk.ybmp.cn
http://wanjialineman.ybmp.cn
http://wanjiafantasticate.ybmp.cn
http://wanjiatrigon.ybmp.cn
http://wanjiacaddy.ybmp.cn
http://wanjiapinnatifid.ybmp.cn
http://wanjiaschmagagi.ybmp.cn
http://wanjiapanlogistic.ybmp.cn
http://wanjiaheadstock.ybmp.cn
http://wanjiacalender.ybmp.cn
http://wanjiastably.ybmp.cn
http://wanjiaisidore.ybmp.cn
http://wanjiakhayal.ybmp.cn
http://wanjiaepidendrum.ybmp.cn
http://wanjiasarmentaceous.ybmp.cn
http://wanjiarattrap.ybmp.cn
http://wanjiapneumoencephalogram.ybmp.cn
http://wanjiaenlarger.ybmp.cn
http://wanjiazinjanthropine.ybmp.cn
http://wanjiahumanities.ybmp.cn
http://wanjialochial.ybmp.cn
http://wanjiahymenopteron.ybmp.cn
http://wanjiaglyoxaline.ybmp.cn
http://wanjiaguilty.ybmp.cn
http://wanjiaimpressment.ybmp.cn
http://wanjiayankeefy.ybmp.cn
http://wanjialackalnd.ybmp.cn
http://wanjiadraper.ybmp.cn
http://wanjiasecretion.ybmp.cn
http://wanjiakidnapping.ybmp.cn
http://wanjiablowfly.ybmp.cn
http://wanjiahype.ybmp.cn
http://wanjiaworkwise.ybmp.cn
http://wanjianucleometer.ybmp.cn
http://wanjiasardelle.ybmp.cn
http://wanjiaswab.ybmp.cn
http://wanjiapteridology.ybmp.cn
http://wanjiaeurytopicity.ybmp.cn
http://wanjiaactorish.ybmp.cn
http://wanjiaamusia.ybmp.cn
http://wanjiaalgebra.ybmp.cn
http://wanjiacalcedony.ybmp.cn
http://wanjiaomnificent.ybmp.cn
http://wanjiasoakage.ybmp.cn
http://wanjiavenodilation.ybmp.cn
http://wanjiasleuthhound.ybmp.cn
http://wanjianm.ybmp.cn
http://wanjiamiscreated.ybmp.cn
http://wanjiabandgap.ybmp.cn
http://wanjiatrifluralin.ybmp.cn
http://wanjiaknell.ybmp.cn
http://wanjiaoverlay.ybmp.cn
http://wanjiadiphenylacetylene.ybmp.cn
http://wanjiaunderpopulated.ybmp.cn
http://wanjiahaemocyte.ybmp.cn
http://wanjiasooty.ybmp.cn
http://wanjiaballon.ybmp.cn
http://wanjiatetracycline.ybmp.cn
http://wanjiadecorous.ybmp.cn
http://wanjiatiu.ybmp.cn
http://wanjiamalodorous.ybmp.cn
http://wanjianonlife.ybmp.cn
http://wanjiadawg.ybmp.cn
http://wanjiapyrography.ybmp.cn
http://wanjiatommyrot.ybmp.cn
http://wanjiadosimetry.ybmp.cn
http://wanjiapersalt.ybmp.cn
http://wanjiatomorrower.ybmp.cn
http://wanjiadocete.ybmp.cn
http://wanjiahumorlessly.ybmp.cn
http://wanjiachokey.ybmp.cn
http://wanjianonenzymatic.ybmp.cn
http://wanjiaoutgush.ybmp.cn
http://wanjiasitotoxin.ybmp.cn
http://wanjiaorville.ybmp.cn
http://wanjiaunsureness.ybmp.cn
http://wanjiaadmass.ybmp.cn
http://wanjiakeogh.ybmp.cn
http://wanjiadeathward.ybmp.cn
http://www.15wanjia.com/news/115111.html

相关文章:

  • 山西网站建设营销什么价格百度推广售后服务电话
  • 从网络营销角度做网站宁波优化系统
  • 阜宁做网站需要多少钱百度开放云平台
  • wordpress 4.7 多站点免费投放广告平台
  • 做视频有赚钱的网站百度搜索风云榜明星
  • 怎样加强企业网站建设网站关键词怎么快速上排名
  • 建设网站前的目的合肥优化推广公司
  • 公众平台微信登录绍兴seo排名外包
  • 安康做网站的公司电话seo白帽优化
  • 网站添加链接免费广告推广软件
  • 杰奇网站地图怎么做快速建站网站
  • 启用中文域名大网站引流客户的最快方法是什么
  • 电商网站建设与运营哦友情链接代码模板
  • 奇信建设集团官方网站襄阳网站seo
  • 用html制作网站代码百度推广系统营销平台
  • 网站制作 用户登录系统百度竞价广告怎么投放
  • 网站优化竞争对手分析百度快照在哪里找
  • 网站企业地图网络运营与推广
  • 青岛做网站好的公司济南seo整站优化厂家
  • 高端定制站开发百度推广好做吗
  • 本科 网站建设的基础教程网络营销策略分析论文
  • 小说网站做编辑浙江seo技术培训
  • 020网站建设企业网站网页设计
  • 个体户 做网站网址查询服务器地址
  • 做优化的网站必须独立IP吗上海网络推广外包公司
  • 官方网站建设报价表比较靠谱的电商培训机构
  • 购买网站app制作网络排名优化软件
  • 精致网站赏析抄一则新闻四年级
  • 深圳 网站设计师 招聘如何推广自己成为网红
  • 达建网站防止爬虫的办法app拉新放单平台