美文网首页Djangohhhdjango
django-rest-framework配置json web

django-rest-framework配置json web

作者: EarthChen | 来源:发表于2017-08-06 18:08 被阅读948次

    使用django-rest-framework开发api并使用json web token进行身份验证
    在这里使用django-rest-framework-jwt这个库来帮助我们简单的使用jwt进行身份验证
    并解决一些前后端分离而产生的跨域问题

    流程

    安装

    安装django-rest-framework

    现在接口一般都是restful风格,所以我们直接使用这个框架

    1. 在终端输入以下命令安装
    pip install djangorestframe
    
    1. 在settings.py的INSTALLED_APPS中加入:
    INSTALLED_APPS = [
        ...
        'rest_framework',
        'rest_framework.authtoken',  # 设置token
        ...
    ]
    

    安装django-rest-framework-jwt

    安装jwt库,简单快速的生成我们所需要的token

    1. 在终端输入以下命令安装:
    pip install djangorestframework-jwt
    
    1. 在你的settings.py,添加JSONWebTokenAuthentication到Django REST框架DEFAULT_AUTHENTICATION_CLASSES
    # django-rest-framework设置
    REST_FRAMEWORK = {
        'PAGE_SIZE': 10,
    
        # 设置所有接口都需要被验证
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        ),
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
    }
    

    安装django-cors-headers

    解决api跨域请求有好几种方法,比如(jsonp,在apache或nginx中设置,在请求头里设置),我们这里使用这个包来方便的跨域

    1. 在终端输入如下命令:
    pip install django-cors-headers
    

    2.配置settings.py文件

    INSTALLED_APPS = [
        ...
        'corsheaders',
        ...
     ] 
    
    MIDDLEWARE_CLASSES = (
        ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware', # 注意顺序
        ...
    )
    
    CORS_ORIGIN_WHITELIST = (
        #'*'
        '127.0.0.1:8080',# 请求的域名
        'localhost:8080',
        'localhost',
    )
    
    

    配置

    后端配置

    1. 在setting里设置token的过期时间
    import datetime
    JWT_AUTH = {
        'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
    }
    

    当然还有很多其他相关设置,可以自己翻阅文档

    1. 修改使用jwt验证的URL
    from rest_framework_jwt.views import obtain_jwt_token
    
    url(r'^api-token-auth/', obtain_jwt_token),
    
    1. 配置页面访问权限
      按需设置访问权限,加上token之后基本上是不经过认证是不能查看或修改数据的
    前端配置

    (在前端我们使用jQuery封装的ajax来操作get和post)

    1. 使用post方法获取token并存入html的localStorage中
    <script type="text/javascript">
     function post_test() {
            $.post("http://10.127.48.204:8000/api-token-auth/",{
                'username':'earthchen',
                'password':'xxxxxxxx'
            },
            function(result){
                if(result){
                    localStorage.token=result.token;  存入数据
                }
            })
        }
    </script>
    
    1. 在请求数据时需要在头部添加token
    <script type="text/javascript">
    function test(){
        $.ajax({
            headers:{
                'Authorization':'JWT '+localStorage.token  //注意:jwt后面有个空格
            },
            type:"get",
            url:"http://10.127.48.204:8000/snippets/1/",
            success:function(result){
               document.write(result.style);
            }
        })
    }
    <script>
    

    存入的token如图所示


    django-rest-framework-jwt-token

    这时如果如果ajax请求不在head中带上token那将被禁止请求,会产生如图所示效果


    django-rest-framework-jwt-no-token

    所以在开发阶段,我们先应不让jwt拦截所有请求,这样对我们测试产生诸多不变

    注:

    • 上述环境在ubuntu16.04 lts django1.9中搭建测试成功
    • 上述文字皆为个人看法,如有错误或建议请及时联系我

    相关文章

      网友评论

        本文标题:django-rest-framework配置json web

        本文链接:https://www.haomeiwen.com/subject/hiknlxtx.html