Django REST framework 学习笔记

 Django FBV、CBV

FBV,function base view

# 路由
url(r'^users/', views.users),

# 视图
from django.shortcuts import HttpResponse
import json


def users(request):
    user_list = ['lcg', 'superman']
    return HttpResponse(json.dumps((user_list)))

CBV,class base view 

# 路由
url(r'^students/', views.StudentsView.as_view()),

# 视图
from django.shortcuts import HttpResponse
from django.views import View


class StudentsView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('GET')

    def post(self, request, *args, **kwargs):
        return HttpResponse('POST')

    def put(self, request, *args, **kwargs):
        return HttpResponse('PUT')

    def delete(self, request, *args, **kwargs):
        return HttpResponse('DELETE')

CSRF认证设置

情况一:
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',  # 全站使用csrf认证
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

from django.views.decorators.csrf import csrf_exempt


@csrf_exempt  # 该函数无需认证
def users(request):
    user_list = ['alex', 'oldboy']
    return HttpResponse(json.dumps((user_list)))


情况二:
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware', # 全站不使用csrf认证
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

from django.views.decorators.csrf import csrf_protect


@csrf_protect  # 该函数需认证
def users(request):
    user_list = ['alex', 'oldboy']
    return HttpResponse(json.dumps((user_list)))

CBV小知识, csrf时需要使用

  - @ method_decorator(csrf_exempt)

  - 在dispatch方法中(单独方法无效,路由上as_view()决定了先走dispatch方法)

# 方式一:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
 
 
class StudentsView(View):
 
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(StudentsView, self).dispatch(request, *args, **kwargs)
 
    def get(self, request, *args, **kwargs):
        print('get方法')
        return HttpResponse('GET')
 
    def post(self, request, *args, **kwargs):
        return HttpResponse('POST')
 
    def put(self, request, *args, **kwargs):
        return HttpResponse('PUT')
 
    def delete(self, request, *args, **kwargs):
        return HttpResponse('DELETE')
 
 
# 方式二:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
 
 
@method_decorator(csrf_exempt, name='dispatch')
class StudentsView(View):
 
    def get(self, request, *args, **kwargs):
        print('get方法')
        return HttpResponse('GET')
 
    def post(self, request, *args, **kwargs):
        return HttpResponse('POST')
 
    def put(self, request, *args, **kwargs):
        return HttpResponse('PUT')
 
    def delete(self, request, *args, **kwargs):
        return HttpResponse('DELETE')

REST framework 之用户认证

models.py

from django.db import models

class UserInfo(models.Model):
    user_type_choices = (
        (1,'普通用户'),
        (2,'VIP'),
        (3,'SVIP'),
    )
    user_type = models.IntegerField(choices=user_type_choices)
    username = models.CharField(max_length=32,unique=True)
    password = models.CharField(max_length=64)

class UserToken(models.Model):
    user = models.OneToOneField(to='UserInfo')
    token = models.CharField(max_length=64)
api/models.py

python manage.py makemigrations

python manage.py migrate

 

  

 

posted @ 2018-03-08 21:08  0bug  阅读(120)  评论(0)    收藏  举报