rest frame work纪念版代码
2024-08-31 01:30:27
models.py
from django.db import models from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles from pygments.lexers import get_lexer_by_name from pygments.formatters.html import HtmlFormatter from pygments import highlight 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()) 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') highlighted = models.TextField() def save(self, *args, **kwargs): lexer = get_lexer_by_name(self.language) linenos = self.linenos and 'table' or False options = 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) class Meta: ordering = ('created',)
urls.py
__author__ = 'CHENGANG882' from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns from snippets import views urlpatterns = [ url(r'^$', views.api_root), url(r'^snippets/$', views.SnippetList.as_view(), name='snippet-list'), url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view(), name='snippet-detail'), url(r'^users/$', views.UserList.as_view(),name='user-list'), url(r'^users/(?P<pk>[0-9]+)/$', views.UserDetail.as_view(), name='user-detail'), url(r'^snippets/(?P<pk>[0-9]+)/highlight/$', views.SnippetHighlight.as_view(), name='snippet-highlight'), ] urlpatterns = format_suffix_patterns(urlpatterns)
serializers.py
__author__ = 'CHENGANG882' from rest_framework import serializers from .models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES from django.contrib.auth.models import User class SnippetSerializer(serializers.HyperlinkedModelSerializer): owner = serializers.ReadOnlyField(source='owner.username') highlight = serializers.HyperlinkedIdentityField(view_name='snippet-highlight', format='html') class Meta: model = Snippet fields = ('url', 'pk', 'highlight', 'owner', 'title', 'code', 'linenos', 'language', 'style') class UserSerializer(serializers.HyperlinkedModelSerializer): snippets = serializers.HyperlinkedRelatedField(many=True, view_name='snippet-detail', read_only=True) class Meta: model = User fields = ('url', 'pk', 'username', 'snippets')
views.py
from rest_framework import generics from .models import Snippet from .serializers import SnippetSerializer, UserSerializer from django.contrib.auth.models import User from rest_framework import permissions from .permissons import IsOwnerOrReadOnly from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework.reverse import reverse from rest_framework import renderers # Create your views here. class SnippetList(generics.ListCreateAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly) def perform_create(self, serializer): serializer.save(owner=self.request.user) class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): queryset = Snippet.objects.all() serializer_class = SnippetSerializer permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly) class UserList(generics.ListAPIView): queryset = User.objects.all() serializer_class = UserSerializer class UserDetail(generics.RetrieveAPIView): queryset = User.objects.all() serializer_class = UserSerializer class SnippetHighlight(generics.GenericAPIView): queryset = Snippet.objects.all() renderer_classes = (renderers.StaticHTMLRenderer,) def get(self, request, *args, **kwargs): snippet = self.get_object() return Response(snippet.highlighted) @api_view(['GET']) def api_root(request, format=None): return Response({ 'users': reverse('user-list', request=request, format=format), 'snippets': reverse('snippet-list', request=request, format=format) })
permissions.py
__author__ = 'CHENGANG882' from rest_framework import permissions class IsOwnerOrReadOnly(permissions.BasePermission): def has_object_permission(self, request, view, obj): if request.method in permissions.SAFE_METHODS: return True return obj.owner == request.user
最新文章
- aliyun阿里云Maven仓库地址——加速你的maven构建
- poj2689Prime Distance 素数测试
- 黑科技项目:英雄无敌III Mod <;<;Fallen Angel>;>;介绍
- 简述移动端IM开发的那些坑:架构设计、通信协议和客户端
- 之三:CAAnimationGroup - 动画组
- 检测当前网段哪些IP是在线的
- PHP不同域名cookie共享(单点登录实现原理)
- 某个 UIView的dealloc方法不执行
- connection.getResponseCode()!=200
- android 项目学习随笔四(优化ViewPager)
- apache问题集锦
- Java单例模式和volatile关键字
- CUICatalog: Invalid asset name supplied:
- 【codevs】2776寻找代表元
- 用TinyXml2读取XML文件的一个简单Demo
- python学习笔记 tuple
- 【转载】Apache Spark Jobs 性能调优(二)
- CF76A.Gift [最小生成树]
- 3、Docker镜像管理基础
- Mybatis 3 配置 Log4j
热门文章
- centos 7 配置php
- 简单几何(水)BestCoder Round #50 (div.2) 1002 Run
- c语言数据读入---sscanf、fscanf
- 381 Insert Delete GetRandom O(1) - Duplicates allowed O(1) 时间插入、删除和获取随机元素 - 允许重复
- Oracle数据库数据显示乱码问题解决方法。
- 什么是2MSL以及TIME_WAIT的作用
- 《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Watcher】
- sed -i 报错的情况
- 如何向expect脚本里面传递参数
- django-registration (1048, “Column &#39;last_login&#39; cannot be null”)