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

松阳网站建设常用的网站建设技术包括

松阳网站建设,常用的网站建设技术包括,医院网站建设趋势,福田蒙派克10座一、Django框架实现项目查询接口 主要知识点#xff1a; Django框架视图函数 1、在 Django 项目中创建一个应用#xff08;如果还没有创建#xff09;#xff1a; python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…一、Django框架实现项目查询接口 主要知识点 Django框架视图函数 1、在 Django 项目中创建一个应用如果还没有创建 python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db import modelsclass Project(models.Model):name models.CharField(max_length100)description models.TextField()# 添加其他字段按需求3、运行数据库迁移命令以创建项目表 python manage.py makemigrations python manage.py migrate4、在应用的 views.py 文件中编写视图函数来处理查询项目列表的请求 from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from .models import Projectcsrf_exempt def project_list(request):projects Project.objects.all()data [{id: project.id, name: project.name} for project in projects]return JsonResponse(data, safeFalse)csrf_exempt def create_project(request):if request.method POST:name request.POST.get(name)leader request.POST.get(leader)# 获取其他字段的值project Project(namename, leaderleader)project.save()return JsonResponse({message: Project created successfully})return JsonResponse({message: Invalid request})csrf_exempt def update_project(request, pk):project Project.objects.get(pkpk)if request.method PUT:name request.PUT.get(name)leader request.PUT.get(leader)# 获取其他字段的值project.name nameproject.leader leader# 更新其他字段的值project.save()return JsonResponse({message: Project updated successfully})return JsonResponse({message: Invalid request})csrf_exempt def delete_project(request, pk):project Project.objects.get(pkpk)project.delete()return JsonResponse({message: Project deleted successfully})5、在项目的 urls.py 文件中配置 URL 映射 from django.urls import path from .views import project_list, create_project, update_project, delete_projecturlpatterns [path(projects/, project_list),path(projects/create/, create_project),path(projects/int:pk/update/, update_project),path(projects/int:pk/delete/, delete_project), ]6、运行开发服务器并访问 /projects/ 路径即可获取项目列表 python manage.py runserver 访问 http://localhost:8000/projects/ 我们实现了哪些功能点 在视图文件中手写处理数据的方法并与请求方法做匹配在路由文件中将路由映射到视图函数中具体某个方法上。 二、引入DRF中的序列化器serializers 主要知识点 DRF框架列化器serializersapi_view([GET]) 装饰器 2.1 序列化器的作用 在视图中将从表里取出来的数据组装成接口返回数据我们是手动一个一个写的。 使用序列化器serializers直接将从表中取出的对象转成我们需要的json的数据格式。 2.2 应用序列化器serializers 1、首先确保你已经在 Django 项目中安装了 djangorestframework 库 pip install djangorestframework 2、在你的项目的 settings.py 文件中将 rest_framework 添加到 INSTALLED_APPS 列表中 INSTALLED_APPS [# 其他已存在的应用rest_framework, ]3、在项目的 serializers.py 文件中创建一个项目序列化器类 from rest_framework import serializers from .models import Projectclass ProjectSerializer(serializers.ModelSerializer):class Meta:model Projectfields __all__ # 或者指定你想要序列化的字段4、在应用的 views.py 文件中编写视图函数来处理查询项目列表的请求并使用序列化器来序列化数据 from rest_framework.decorators import api_view from rest_framework.response import Response from .models import Project from .serializers import ProjectSerializerapi_view([GET]) def project_list(request):projects Project.objects.all()serializer ProjectSerializer(projects, manyTrue)return Response(serializer.data)注意 api_view([GET]) 是 Django REST Framework 的装饰器用于标识视图函数可以处理哪种类型的 HTTP 请求。 在这个例子中api_view([GET]) 装饰器将 project_list 视图函数标记为只能处理 GET 请求。这样当客户端发送一个 GET 请求到 /projects/ 路径时Django 将调用 project_list 视图函数来处理该请求。 使用 api_view([GET]) 装饰器是为了确保视图函数只接受 GET 请求并且提供了一些附加功能例如自动返回适当的响应和错误处理。 另外api_view 装饰器还支持其他 HTTP 方法如 POST、PUT、DELETE 等。只需根据需要将其放入列表中即可例如 api_view([GET, POST]) 可以处理 GET 和 POST 请求。这样你可以轻松处理不同类型的请求并编写相应的逻辑来处理每个类型的请求。 5、在项目的 urls.py 文件中配置 URL 映射 from django.urls import path from projects.views import project_listurlpatterns [path(projects/, project_list, nameproject-list),# 添加其他 URL 映射按需求 ]6、运行开发服务器并访问 /projects/ 路径即可获取项目列表 python manage.py runserver 访问 http://localhost:8000/projects/ 我们实现了哪些功能点 使用序列化器类代替了手动组装返回数据 三、引入视图类  APIView 主要知识点 APIView视图类 3.1 引入视图类  APIView 1、在应用的 views.py 文件中创建一个继承自 Django REST Framework 的 APIView 的视图类 from rest_framework.views import APIView from rest_framework.response import Response from .models import Project from .serializers import ProjectSerializerclass ProjectListAPIView(APIView):def get(self, request, *args, **kwargs):# 处理 GET 请求返回项目列表projects Project.objects.all()serializer ProjectSerializer(projects, manyTrue)return Response(serializer.data)def post(self, request, *args, **kwargs):# 处理 POST 请求创建新的项目serializer ProjectSerializer(datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status201)return Response(serializer.errors, status400)def put(self, request, *args, **kwargs):# 处理 PUT 请求更新整个项目列表project_data request.data# 对项目列表进行处理return Response(...)def patch(self, request, *args, **kwargs):# 处理 PATCH 请求部分更新项目列表project_data request.data# 对项目列表进行处理return Response(...)def delete(self, request, *args, **kwargs):# 处理 DELETE 请求删除项目列表# 删除项目列表的逻辑return Response(...)在这个示例中我们定义了一个 ProjectListAPIView 类继承自 APIView。我们在其中定义了一个 get 方法来处理 GET 请求。 注意 1、继承APIView 视图类 2、需要手写get post 等方法实现的具体逻辑 get(self, request, *args, **kwargs)处理 GET 请求用于获取项目列表。post(self, request, *args, **kwargs)处理 POST 请求用于创建新的项目。put(self, request, *args, **kwargs)处理 PUT 请求用户更新某个项目下的所有字段资源patch(self, request, *args, **kwargs)处理 PATCH 请求用户更新某个项目下的部分字段资源delete(self, request, *args, **kwargs)处理 DELETE 请求用于删除项目列表。 2、在项目的 urls.py 文件中配置 URL 映射来使用视图类 from django.urls import path from projects.views import ProjectListAPIViewurlpatterns [path(projects/, ProjectListAPIView.as_view(), nameproject-list),# 添加其他 URL 映射按需求 ]这里使用 .as_view() 方法将视图类转换为可用于 URL 映射的可调用对象。 现在当你访问 http://localhost:8000/projects/你应该能够看到以 JSON 格式返回的项目列表。这是通过调用 ProjectListAPIView 类的 get 方法来实现的。 使用视图类可以更好地组织代码提供更多灵活性并且可以通过覆盖不同的 HTTP 方法如 get()、post() 等来处理不同类型的请求。 我们实现了哪些功能点 继承视图类  APIView手动实现get post put等数据处理逻辑路由自动生成 四、引入视图类  viewsets.ViewSet 主要知识点 viewsets.ViewSet视图类 4.1 引入视图类  viewsets.ViewSet 1、在 views.py 文件中导入 viewsets 和相应的模块 from rest_framework import viewsets from .models import Project from .serializers import ProjectSerializer2、创建一个继承自 viewsets.ViewSet 的类并编写对应的方法和逻辑 from .models import Project from .serializers import ProjectSerializer from rest_framework import viewsets from rest_framework.response import Responseclass ProjectViewSet(viewsets.ViewSet):def list(self, request):# 列出所有项目的列表projects Project.objects.all()serializer ProjectSerializer(projects, manyTrue)return Response(serializer.data)def retrieve(self, request, pkNone):# 检索某一个项目的详细信息project Project.objects.get(pkpk)serializer ProjectSerializer(project)return Response(serializer.data)def create(self, request):# 创建一条数据serializer ProjectSerializer(datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status201)return Response(serializer.errors, status400)def update(self, request, pkNone):# 更新列表project Project.objects.get(pkpk)serializer ProjectSerializer(project, datarequest.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status400)def partial_update(self, request, pkNone):# 更新一条数据project Project.objects.get(pkpk)serializer ProjectSerializer(project, datarequest.data, partialTrue)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status400)def destroy(self, request, pkNone):# 删除数据project Project.objects.get(pkpk)project.delete()return Response(status204) 在这个示例中我们创建了一个名为 ProjectViewSet 的视图集继承自 viewsets.ViewSet。 .list()列出所有项目的列表  - get.retrieve()检索某一个项目的详细信息 - get.create() : 创建一条数据 - postupdate(): 更新列表 - put.partial_update():更新一条数据 - patch.destroy()删除数据 - delete 3、在 urls.py 文件中配置 URL 映射来使用视图集 为了将 ProjectViewSet 的方法与 URL 关联起来你可以使用 DefaultRouter 进行自动路由配置。 from rest_framework.routers import DefaultRouterrouter DefaultRouter() router.register(rprojects, ProjectViewSet, basenameproject) urlpatterns router.urls通过上述代码我们将 ProjectViewSet 的方法自动关联到了 /projects 路径上并为每个方法生成了对应的 URL。 发送 GET 请求到 /projects 路径时将会调用 list 方法 当你发送 POST 请求到 /projects 路径时将会调用 create 方法。 你可以根据需要进一步扩展该视图集。 我们实现了哪些功能点 继承视图类  ViewSet手动实现list create 等action路由自动生成 4.1.1 扩展update() 与 partial_update() update() 方法和 partial_update() 方法是继承自 viewsets.ViewSet 类的两个操作方法用于更新资源。 update() 方法 update() 方法用于完整更新一个资源。它接收一个完整的请求数据并将该数据应用于指定的资源对象。任何未提供的字段都将被设置为默认值或空值。如果资源不存在则会创建一个新的资源。这意味着在执行 update() 方法时需要提供完整的数据来替换现有的资源。 partial_update() 方法 partial_update() 方法用于部分更新一个资源。它接收一个部分请求数据并将该数据部分地应用于指定的资源对象。只提供的字段将被更新而未提供的字段将保持原样。这使得可以只更新资源对象的部分属性而不必提供完整的数据。这对于只想更新资源的特定字段或属性非常有用。 使用场景 使用 update() 方法时适合在客户端有所有的资源属性信息并且要求完全替换已有资源的情况下使用。例如当用户填写一个包含所有资源字段的表单时可以使用 update() 方法将表单数据直接应用于资源对象。使用 partial_update() 方法时适合在客户端只有要更新的部分资源属性信息的情况下使用。例如当用户只更改了资源的部分字段时可以使用 partial_update() 方法仅更新这些字段而不影响其他字段。 举个例子有一个学生列表学生属性包含id、姓名、年龄、性别四个字段。 update() 方法会更新id为1的学生信息所有的字段id、姓名、年龄、性别 partial_update() 方法只会新id为1的学生信息其中的部分字段可能只更新年龄这个字段 总之update() 方法用于完整替换资源而 partial_update() 方法用于部分更新资源。根据客户端提供的数据以及是否需要更新全部字段或仅部分字段选择使用适当的方法。 4.2 list()方法如何实现关联GET请求 继承视图类viewsets.ViewSet实现list等action是如何与get请求做自动关联的。 父类APIViewdispatch 方法实现的。 源码 def dispatch(self, request, *args, **kwargs):.dispatch() is pretty much the same as Djangos regular dispatch,but with extra hooks for startup, finalize, and exception handling.self.args argsself.kwargs kwargsrequest self.initialize_request(request, *args, **kwargs)self.request requestself.headers self.default_response_headers # deprecate?try:self.initial(request, *args, **kwargs)# Get the appropriate handler methodif request.method.lower() in self.http_method_names:handler getattr(self, request.method.lower(),self.http_method_not_allowed)else:handler self.http_method_not_allowedresponse handler(request, *args, **kwargs)except Exception as exc:response self.handle_exception(exc)self.response self.finalize_response(request, response, *args, **kwargs)return self.response dispatch()方法是Django Rest Framework中APIView类的一个重要方法它负责将传入的HTTP请求分派到适当的处理方法上。该方法在处理请求之前被调用。 在APIView中dispatch()方法执行以下主要任务 确定要调用的具体处理方法dispatch()方法会根据请求的HTTP方法例如GET、POST、PUT等和URL中的路径参数确定应该调用哪个具体的处理方法来处理请求。调用前置钩子方法在实际执行处理方法之前dispatch()方法会调用一些前置钩子方法如initial()和get_serializer()这些钩子方法用于进行准备工作例如对请求进行验证、获取序列化器等。执行处理方法一旦确定了要调用的处理方法并完成了必要的准备工作dispatch()方法将执行相应的处理方法例如get()、post()、put()等来处理请求。处理异常如果在执行处理方法时出现异常dispatch()方法会捕获异常并调用相应的异常处理方法例如handle_exception()来处理异常情况。调用后置钩子方法在请求处理完毕后dispatch()方法会调用一些后置钩子方法如finalize_response()和get_renderers()用于进行清理工作例如生成响应、选择渲染器等。 通过重写dispatch()方法您可以自定义请求的处理过程。例如您可以添加额外的前置或后置处理逻辑或者修改请求调度的方式。 from rest_framework.views import APIViewclass MyAPIView(APIView):def dispatch(self, request, *args, **kwargs):# 在调用具体处理方法之前的自定义处理逻辑# ...response super().dispatch(request, *args, **kwargs)# 在调用具体处理方法之后的自定义处理逻辑# ...return response请注意一旦调用了super().dispatch(request, *args, **kwargs)实际的处理方法将被调用并且返回响应对象。您可以在返回响应之前或之后执行自定义处理逻辑。 总之dispatch()方法在DRF的APIView类中起着关键的作用负责将请求分派到相应的处理方法并提供了一个扩展点使您能够自定义请求的处理过程。 五、viewsets.ViewSet与APIView对比 5.1 对比 viewsets.ViewSet和APIView是Django Rest FrameworkDRF中用于处理API请求的两个不同的类。下面是它们的对比 功能 viewsets.ViewSetViewSet是一个更高级的抽象它结合了多个相关的API操作如列表、创建、检索、更新、删除等到一个类中。ViewSet内置了一些常见的操作方法如list()、create()、retrieve()、update()等。同时您可以使用action装饰器添加自定义的额外操作。APIViewAPIView是一个基于类的视图它提供了在处理不同HTTP方法时需要实现的单个方法如get()、post()、put()等。您需要手动编写每个HTTP方法的处理逻辑。 代码组织 viewsets.ViewSet通过将相关的操作组织到一个类中ViewSet提供了更好的代码组织性和可读性。它可以更清晰地表示与某个实体或资源相关的多个操作并且使代码更易于维护和扩展。APIViewAPIView将每个HTTP方法的处理逻辑拆分为独立的方法因此代码组织可能相对分散。但是这也使得在每个方法中可以更灵活地处理请求。 URL配置 viewsets.ViewSetViewSet通常与Router一起使用以自动为ViewSet中的操作方法生成URL配置。这样您无需手动定义每个URL并且可以遵循一种统一的URL命名约定。APIView由于APIView是基于类的视图您需要手动在URL配置中指定每个具体的HTTP方法所对应的URL。 程序复杂性 viewsets.ViewSetViewSet提供了一种简化和高级的方式来处理多个相关操作。它抽象了常见的API操作并提供了默认实现的操作方法减少了开发者编写重复代码的工作量。APIViewAPIView更加灵活允许您完全控制请求的处理方式。它适合对每个HTTP方法都有精确处理逻辑或者对请求做出高度定制的情况。 5.2 应用场景 5.2.1  viewsets.ViewSet 当需要处理与某个特定实体或资源相关的多种不同API操作如列表、创建、检索、更新、删除等时可以使用viewsets.ViewSet。它能够将这些相关的操作集中到一个类中提高代码的组织性和可读性。当需要为实体或资源定义自定义的额外操作时可以使用action装饰器将自定义操作添加到viewsets.ViewSet中。 例如假设我们有一个Book模型我们可以使用ViewSet来处理与图书相关的各种操作 from rest_framework import viewsetsclass BookViewSet(viewsets.ViewSet):def list(self, request):# 返回图书列表def create(self, request):# 创建新图书def retrieve(self, request, pkNone):# 检索单个图书def update(self, request, pkNone):# 更新图书def destroy(self, request, pkNone):# 删除图书action(detailTrue, methods[post])def borrow(self, request, pkNone):# 自定义操作借阅图书action(detailTrue, methods[post])def return_book(self, request, pkNone):# 自定义操作归还图书5.2.2 APIView 当需要对每个HTTP方法如GET、POST、PUT等都有具体的处理逻辑时可以使用APIView。对于每个HTTP方法您需要手动在APIView的子类中实现相应的方法。当需要对请求进行更精细的控制和自定义处理逻辑时可以使用APIView。通过重写dispatch()方法和其他相关方法可以实现对请求的高度定制。 例如如果我们需要对一个特定的API端点进行精细的控制和自定义处理逻辑我们可以使用APIView from rest_framework.views import APIViewclass MyView(APIView):def get(self, request):# GET请求处理逻辑def post(self, request):# POST请求处理逻辑def put(self, request):# PUT请求处理逻辑def delete(self, request):# DELETE请求处理逻辑def dispatch(self, request, *args, **kwargs):# 自定义请求调度逻辑return super().dispatch(request, *args, **kwargs)总之viewsets.ViewSet适用于处理与某个实体或资源相关的多个操作并且需要提供默认操作方法和自定义操作。而APIView适用于对每个HTTP方法都有具体处理逻辑或者对请求进行更精细的控制和定制的情况。根据具体的业务需求和开发需求可以选择使用适合的类来处理API请求。 六、viewsets.ModelViewSet 1、视图 from rest_framework import viewsets from .models import Project from .serializers import ProjectSerializerclass ProjectViewSet(viewsets.ModelViewSet):queryset Project.objects.all()serializer_class ProjectSerializer 重启项目查看接口文档。 注意 viewsets.ModelViewSet 视图类与 viewsets.ViewSet 视图类实现的接口是一模一样的。viewsets.ModelViewSet 视图类 是自动实现的viewsets.ViewSet 视图类 需要手动实现
http://www.zqtcl.cn/news/30052/

相关文章:

  • ps 做ui比较好的网站厦门同安建设局网站
  • 民治做网站哪家便宜网站怎么优化自己免费
  • 深圳罗湖网站设计公司四库一平台官网
  • 南阳微网站建设俄乌今天最新军事动态
  • 安徽经工建设集团网站北京建站推广
  • 衡水市网站制作哈尔滨网站域名备案
  • 网站制作代理加盟网站出现乱码怎么办
  • 北京移动网站建设公司排名广州微网站建设机构
  • 有没有做汽车维修记录网站网站开发需要用到的技术
  • 类似12306网站开发做实验学编程的网站
  • 张槎杨和网站建设小程序代理平台
  • 淘宝推广网站怎么建设快递公司网页模板
  • 网站建设的文案宁波网站优化建站公司
  • 做设计必看十大网站虚拟主机评测
  • 成都哪家做网站比较好自己如何建立网站
  • 做书的封面网站怎么找项目
  • 网站后台如何上传图片外贸响应式网站设计
  • 建站节高端品牌衣服有哪些牌子
  • 网站设计论坛网址搜索器
  • 做网站线稿软件有哪些湛江人才网
  • 交互网站图通信建设网站
  • 网站建设丨金手指排名15网站适配移动端和PC端
  • 大庆网站开发汽车网页
  • 建立网站需要哪些东西网站建设设备
  • 做一小说网站要花多钱山东建设厅网站是什么
  • 北京燕化工程建设有限公司网站福田欧辉氢燃料电池客车
  • 如何分析一个网站的用户网站统计代码怎么添加
  • 池州商城网站开发做网站需要备案么
  • 十度公司做网站怎么样绍兴建设网站
  • 网站统计热力图展览展示设计有限公司