You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
frompygments.lexersimportget_lexer_by_namefrompygments.formatters.htmlimportHtmlFormatterfrompygmentsimporthighlightdefsave(self, *args, **kwargs):
""" Use the `pygments` library to create a highlighted HTML representation of the code snippet. """lexer=get_lexer_by_name(self.language)
linenos='table'ifself.linenoselseFalseoptions= {'title': self.title} ifself.titleelse {}
formatter=HtmlFormatter(style=self.style, linenos=linenos,
full=True, **options)
self.highlighted=highlight(self.code, lexer, formatter)
super(Snippet, self).save(*args, **kwargs)
스니펫에 유저정보가 연결되어 있지 않다. 유저정보는 serialised representation 에 전달 되지 않음. 그렇지만 리퀴스트 정보로 들어옴.
이걸 해결하는 방법은 스니펫 views를 " .perform_create() " 를 오버라이드하면 된다
→ 이걸 통해 인스턴스 save관리되는 지를 수정, implicit 하게 들어오는 리퀘스트 혹은 요청된 url을 핸들하게 됨.
# permissions.py → 새로 생성해야하는 파일이다.fromrest_frameworkimportpermissionsclassIsOwnerOrReadOnly(permissions.BasePermission):
""" Custom permission to only allow owners of an object to edit it. """defhas_object_permission(self, request, view, obj):
# Read permissions are allowed to any request,# so we'll always allow GET, HEAD or OPTIONS requests.ifrequest.methodinpermissions.SAFE_METHODS:
returnTrue# Write permissions are only allowed to the owner of the snippet.returnobj.owner==request.user
Auth and Permission
Adding information to our model
이제 snippet 모델 클래스에 변경사항을 몇개 적용해야한다.
모델에 html 포맷으로 적혀있는 부분이 있다. → 고걸 맞게 수정?
Adding endpoints for our User models
유저 모델을 생성해서 추가한다.
Associating Snippets with Users
스니펫에 유저정보가 연결되어 있지 않다. 유저정보는 serialised representation 에 전달 되지 않음. 그렇지만 리퀴스트 정보로 들어옴.
이걸 해결하는 방법은 스니펫 views를 " .perform_create() " 를 오버라이드하면 된다
→ 이걸 통해 인스턴스 save관리되는 지를 수정, implicit 하게 들어오는 리퀘스트 혹은 요청된 url을 핸들하게 됨.
스니펫 리스트 view class에 해당 메소드를 추가하면 된다.
시리얼라이저 의 create() 메소드는 이제 새로운 'owner'필드를 passing한다.
Updating our serializer
이제 스니펫 시리얼라이저에 owner 필드를 추가하자.
Adding required permissions to views
이제 스니펫이 유저에 상관되게끔했다. 그래서 이제 승인된 유저만 생성, 업뎃, 삭제할 수 있다.
프레임워크에서 주어진 view에 따라 제한되게할 수 있다.
각 뷰 클래스에 아래 내용을 추가하게 되면 승인된 유저가 아니면 ReadOnly가 적용된다.
Adding login to the Browsable API
로그인 페이지를 추가하는 방법
urlpattern에 아래 패스를 추가하면 된다.
Object Level Permission
커스텀 퍼미션을 생성해보자
그러고나서 스니펫 view 클래스의 엔드포인트에 permission_classes에 추가하면된다.
The text was updated successfully, but these errors were encountered: