目录

  • 新建项目
  • 创建model,并且生成数据表
  • 创建序列化文件
  • view里面的代码
    • 第三级url的路径
    • 第三级view代码的书写(继承)
    • 第3.5级的view
    • 第四级的view
    • 页面展示HTML格式的代码
  • 局部权限控制

新建项目


和helloWord项目一样,就是建项目,搭建Djangorest的项目,现在因为是做代码片段高亮显示的项目,所以,需要一个新表,所以我们需要在model.py里面写一个实体类

创建model,并且生成数据表

from django.db import models# Create your models here.
# 以下的都是官网复制过来的from pygments.lexers import get_all_lexers   # 语言库
from pygments.styles import get_all_styles   # 风格库# 将语言库里面的语言 放到数组里面
LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])# 将风格库里面的东西放到数组里面
STYLE_CHOICES = sorted((item, item) for item in get_all_styles())from pygments.lexers import get_lexer_by_name
from pygments.formatters.html import HtmlFormatter
from pygments import highlight# 创建代码片段表
class Snippet(models.Model):created = models.DateTimeField(auto_now_add=True)title = models.CharField(max_length=100, blank=True, default='')code = models.TextField()linenos = models.BooleanField(default=False)  # 是否要开启行号language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) # 语言选择style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)  # 风格选择owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE, null=True, blank=True)highlighted = models.TextField(null=True, blank=True)  # 具体的代码片段class Meta:# 根据数据创建时间  进行排序ordering = ('created',)def save(self, *args, **kwargs):"""高亮显示相关"""lexer = get_lexer_by_name(self.language)linenos = self.linenos and 'table' or Falseoptions = self.title and {'title': self.title} or {}formatter = HtmlFormatter(style=self.style, linenos=linenos, full=True, **options)self.highlighted = highlight(self.code, lexer, formatter)super(Snippet, self).save(*args, **kwargs)

创建序列化文件

from rest_framework import serializers
from snippetsapp.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICESclass SnippetSerializer(serializers.ModelSerializer):class Meta:model = Snippetfields = ('id', 'title', 'code', 'linenos', 'language', 'style', 'owner',)

以后这个文件里面的类 就是继承serializers.ModelSerializer,就是这个,一定要记住

view里面的代码

第三级url的路径

from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from snippetsapp import viewsurlpatterns = [url(r'^snippets/$', views.SnippetList.as_view(), name='snippet-list'),url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view(), name='snippet-detail'),
]urlpatterns = format_suffix_patterns(urlpatterns)

第三级view代码的书写(继承)

工作中,有可能用

#  第三级  实现浏览器输入json后缀,查询数据的方法是
# 方法名称里面写 format=None  ,url里面写  urlpatterns = format_suffix_patterns(urlpatterns)
from snippetsapp.models import Snippet
from snippetsapp.serializers import SnippetSerializer
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import statusclass SnippetList(APIView):"""LC  查询全部数据,和新增"""def get(self, request, format=None):snippets = Snippet.objects.all()serializer = SnippetSerializer(snippets, many=True)return Response(serializer.data)def post(self, request, format=None):serializer = SnippetSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)class SnippetDetail(APIView):"""RUD"""def get_object(self, pk):try:return Snippet.objects.get(pk=pk)except Snippet.DoesNotExist:raise Http404def get(self, request, pk, format=None):snippet = self.get_object(pk)serializer = SnippetSerializer(snippet)return Response(serializer.data)def put(self, request, pk, format=None):snippet = self.get_object(pk)serializer = SnippetSerializer(snippet, data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)def delete(self, request, pk, format=None):snippet = self.get_object(pk)snippet.delete()return Response(status=status.HTTP_204_NO_CONTENT)

第3.5级的view

工作中,不用这个


#   第四级
from snippetsapp.models import Snippet
from snippetsapp.serializers import SnippetSerializer
from rest_framework import mixins
from rest_framework import genericsclass SnippetList(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):queryset = Snippet.objects.all()serializer_class = SnippetSerializerdef get(self, request, *args, **kwargs):return self.list(request, *args, **kwargs)def post(self, request, *args, **kwargs):return self.create(request, *args, **kwargs)class SnippetDetail(mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,generics.GenericAPIView):queryset = Snippet.objects.all()serializer_class = SnippetSerializerdef get(self, request, *args, **kwargs):return self.retrieve(request, *args, **kwargs)def put(self, request, *args, **kwargs):return self.update(request, *args, **kwargs)def delete(self, request, *args, **kwargs):return self.destroy(request, *args, **kwargs)

第四级的view

最常用的


# 继承工具集(还有视图集)  第四级
class SnippetList(ListCreateAPIView):queryset = Snippet.objects.all()serializer_class = SnippetSerializer# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)def perform_create(self, serializer):serializer.save()class SnippetDetail(RetrieveUpdateDestroyAPIView):queryset = Snippet.objects.all()serializer_class = SnippetSerializer

页面展示HTML格式的代码

我们保存到数据库的代码片段是HTML格式的,我们如何再页面进行展示


view里面写

# 进行HTML格式的展示
from rest_framework import  renderers
from rest_framework.response import Response
class SnippetHighlight(GenericAPIView):queryset = Snippet.objects.all()# 设置渲染器renderer_classes = (renderers.StaticHTMLRenderer,)def  get(self,request,*args,**kwargs):snippets = self.get_object()return  Response(snippets.highlighted)

url里面写

 url(r'^snippets/(?P<pk>[0-9]+)/highlight/$',
views.SnippetHighlight.as_view(), name='SnippetHighlight'),

局部权限控制

在view里面对应的类方法里面写

# 继承工具集(还有视图集)  第四级
class SnippetList(ListCreateAPIView):queryset = Snippet.objects.all()serializer_class = SnippetSerializer# 访问这个类的   权限的控制permission_classes = (permissions.IsAuthenticatedOrReadOnly,)def perform_create(self, serializer):serializer.save()

Django_rest框架片段高亮显示实践项目(一)url和view里面的代码的书写相关推荐

  1. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

  2. python上手--flask框架web开发实践-数据库

    这篇文章,由易而难,步骤清晰,思路讲得很明白.花两小时跟着作者稻谷先生的这篇文章走一遍,对学习python使用Flask来开发web的应用很有帮助. python上手--flask框架web开发实践 ...

  3. 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

    目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践 1. 开源代码整体架构设计 2. 微服务逻辑架构设计 3. 微服务熔断降级与限流规划 3.1 微服务熔断 ...

  4. 豆瓣API实践项目-数据api接口-1

    豆瓣API实践项目-前言-0(可下载源码): http://blog.csdn.net/mario_faker/article/details/79618210 豆瓣API实践项目-数据api接口-1 ...

  5. Cognitive Inference:认知推理下的常识知识库资源、常识推理测试评估与中文实践项目索引...

    作者 | 刘焕勇 责编 | 李雪敬 出品 | CSDN博客 CognitiveInference Cognitive Inference,认知推理.常识知识库.常识推理与常识推理评估的系统项目,以现有 ...

  6. 认知推理下的常识知识库资源、常识测试评估与中文实践项目索引

    作者 | 刘焕勇 责编 | 李雪敬 出品 | CSDN博客 Cognitive Inference Cognitive Inference,认知推理.常识知识库.常识推理与常识推理评估的系统项目,以现 ...

  7. 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章

    近期,由清华大学研究生院和数据科学研究院(以下简称:数据院)共同开设的清华大学大数据能力提升项目<大数据系统基础>实践项目期末答辩在清华大学六号教学楼顺利举行.20位企业导师作为评审参与答 ...

  8. 《大数据系统基础》课程实践项目中期答辩顺利举行,清华持续探索大数据人才教育创新之路

    2017年11月15日,清华大学大数据能力提升项目之<大数据系统基础>课程实践项目中期答辩在清华大学六号教学楼顺利举行.160余名同学分为21组,向任课老师和企业导师汇报了各组实践项目的进 ...

  9. 面向中文自然语言处理的60余类系统开源实践项目与工业探索索引

    项目介绍 面向中文自然语言处理的六十余类实践项目及学习索引,涵盖语言资源构建.社会计算.自然语言处理组件.知识图谱.事理图谱.知识抽取.情感分析.深度学习等几个学习主题.包括作者个人简介.学习心得.语 ...

最新文章

  1. TensorFlow练习27: 验证码生成器-从文本生成图像
  2. Redis介绍 Java客户端操作Redis
  3. 生态篇-HBase 生态介绍
  4. Memcache工作原理总结
  5. 七十六、SpringBoot 的数据缓存cache+Redis(三)
  6. 每天一个linux命令(56):netstat命令
  7. 电子商务之 网店客服中心服务用语规范
  8. .net持续集成cake篇之cake介绍及简单示例
  9. FreeSql (十)更新数据
  10. php mysql redis mq_docker 搭建 php-mysql-nginx-redis-rabbitmq环境
  11. HDU 4927 大数运算
  12. mfc之标识符的匈牙利记法
  13. Idea搭建springcloud(一)---服务注册与发现之Eureka
  14. 用flash cs4 as 绘制图形、 绘制文本 、创建超链接文本
  15. 利用Gazebo搭建赛道,控制小车完成比赛(大学生智能车大赛室外光电组赛道仿真模拟)
  16. python计算标准差函数_Python pandas,pandas常用统计方法,求和sum,均值mean,最大值max,中位数median,标准差std...
  17. 图灵机停机问题的不可判定性
  18. 传真百科:雷雨天对传真通讯有影响吗
  19. 对数据运营工作的思考及优化方向
  20. php菜单无限极分类

热门文章

  1. 数据分析、挖掘方面,有哪些好书值得推荐
  2. GB28181融合视频会议的实现
  3. 新浪新闻简单抓取备忘录
  4. 【Scratch】青少年蓝桥杯_每日一题_7.17_正十二边形图案
  5. 信立通电话交换机调试方法
  6. GPS中经纬度的十进制和六十进制的转换
  7. nacos开启权限验证后,nacos config报错403
  8. 用python编写程序、判断某一年是否是闰年_用C语言编写判断某一年是否是闰年...
  9. mysql 禁用ipv6_linux配置禁用启用IPv6
  10. 银行会计学2(利润、资产的流动)