精华内容
下载资源
问答
  • djangorestframework

    2018-10-11 19:28:00
    一 安装djangorestframeworkdjangorestframework的APIView流程分析 三djangorestframework的request分析 一 安装djangorestframework 基于djangorestframework写API,用这个写接口view函数用CBV 方式一:...

     

    一 安装djangorestframework

    二 djangorestframework的APIView流程分析

    三 djangorestframework的request分析

     

    一 安装djangorestframework

    基于 djangorestframework写API,用这个写接口view函数用CBV

    方式一:pip3 install djangorestframework

    方式二:pycharm图形化界面安装

    方式三:pycharm命令行下安装(装在当前工程所用的解释器下)

     

    二 djangorestframework的APIView流程分析

    请求来的时候先通过restframework先检测,封装,内部有权限,频率,和认证

    request是被djangorestframework封装过了

     

    三 djangorestframework的request分析

    重写了元类的方法:

    __getattr__  拦截点号运算,如果没有属性,并且没有__getattr__则会报错,如果有此方法(异常处理)就不会报错,没有的属性走到这个方法里,返回指定的值

    __setattr__  赋值运算的时候,会走到这个方法里

     

    路由层

    from django.conf.urls import url
    from django.contrib import admin
    from api import views
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # url(r'^book/', views.book),
        url(r'^book/', views.Book.as_view()),
    ]

     

    视图层

    from django.shortcuts import render,HttpResponse
    # Create your views here.
    import json
    from api import models
    
    # 用APIView 写API
    from rest_framework.views import  APIView
    
    class Book(APIView):
        def get(self,request):
         # 前台不管是那种格式(json,urlencode)传过来的数据都转成了字典放在了 request.data里
         # 以后这种API,从前台传过来的数据都从request.data里取值,以前都是从request.body里取值
    # request.data ret=models.Book.objects.all().values('title') print(ret) ll=list(ret) return HttpResponse(json.dumps(ll)) def post(self,request):
         # 前台如果是json传过来就是字典格式,如果是urlencoded格式传过来就是queryset格式 request.data里可以取到值 request.body里没值
    print(request.data) #有值 print(request.POST) #没值 return HttpResponse('ok')

     

    转载于:https://www.cnblogs.com/xujinjin18/p/9774561.html

    展开全文
  • DjangoRestFrameWork

    2019-09-24 18:29:45
    DRF 基于CBV进行开发 先看一下FBV和CBV的区别 URL里 urlpatterns = [ path('admin/',admin,site.urls), path('test_fbv',views.test_fbv), path('test_cbv',TestCBV.as_view()) ......

    DRF 基于CBV进行开发

    先看一下FBV和CBV的区别

    URL里
    urlpatterns = [
            path('admin/',admin,site.urls),
            path('test_fbv',views.test_fbv),
            path('test_cbv',TestCBV.as_view())
            
    ]
    view视图中
    # fbv
    def test_fbv(request):
        return HttpResponse('ok')
    
    
    #CBV
    class TestCBV(View):
        def get(request):
            return HttpResponse('ok')

    看一下CBV的执行流程

    进入as_view()后

    CBV在内部做了一个本质和FBV一样的分发

    以后做接口开发的时候,我们就要用CBV,我们之前学了restful规范,现在就很容易理解我们为什么用CBV了。

    面向资源编程,并且用HTTP的请求方式来对资源进行操作,还要遵循这些方法的语义,所以我们选择CBV编写我们接下来的视图函数。

     

    转载于:https://www.cnblogs.com/beihan/p/9985601.html

    展开全文
  • DjangoRESTframework课件.rar
  • Recipes_DjangoRestFramework
  • 关于djangorestframework-yaml 主页: : 软件包许可证:BSD-3-Clause 原料许可证:BSD 3-条款 摘要:对Django REST Framework的YAML支持 当前构建状态 所有平台: 当前发行信息 姓名 资料下载 版本 平台类 安装...
  • 关于djangorestframework-csv 主页: : 软件包许可证:BSD 原料许可证:BSD 3-条款 摘要:适用于Django REST框架的CSV工具 当前构建状态 所有平台: 当前发行信息 版本: 资料下载: 安装djangorestframework-...
  • 关于djangorestframework-xml 主页: : 软件包许可证:BSD-3-Clause 原料许可证:BSD 3-条款 摘要:对Django REST Framework的XML支持 当前构建状态 所有平台: 当前发行信息 姓名 资料下载 版本 平台类 安装...
  • 关于djangorestframework-filters 主页: : 软件包许可证:麻省理工学院 原料许可证:BSD 3-条款 简介:更好地过滤Django REST Framework 当前构建状态 所有平台: 当前发行信息 姓名 资料下载 版本 平台类 安装...
  • 关于djangorestframework-jwt 主页: : 软件包许可证:麻省理工学院 原料许可证:BSD 3-条款 摘要:对Django REST Framework的JSON Web令牌认证支持 Django REST Framework的JSON Web令牌认证支持 当前构建状态 ...
  • 关于djangorestframework_simplejwt 主页: : 软件包许可证:麻省理工学院 原料许可证:BSD 3-条款 摘要:用于Django REST框架的JSON Web令牌认证插件。 简单的JWT为Django REST框架提供了JSON Web令牌认证后端...
  • 为了在django 下使用token功能,网上搜索发现djangorestframework能够解决这个问题,下面记录了下操作步骤。 我的ubuntu上已经安装了python+django+mysql环境,只需再安装djangorestframework 1,安装...

    为了在django 下使用token功能,网上搜索发现djangorestframework能够解决这个问题,下面记录了下操作步骤。

    我的ubuntu上已经安装了python+django+mysql环境,只需再安装djangorestframework

    1,安装djangorestframework 

          pip install djangorestframework  

    2,创建django工程test_token

          django-admin startproject test_token   创建工程test_token

          python manage.py startapp testtoken   创建应用testtoken

    3,创建数据库

          mysql -u root -p  登录到数据库

          create schema test_token_db default character set utf8 collate utf8_general_ci;创建数据库test_token_db

    4,添加数据库test_token_db

          修改settings.py   

          注释掉默认的sqlite数据库  

           #DATABASES = {
                 # 'default': {
                # 'ENGINE': 'django.db.backends.sqlite3',
                # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
             # }
           #}

          添加我们定义的sql数据库

          DATABASES = {
              'default': {
                   'ENGINE': 'django.db.backends.mysql',
                   'NAME': 'test_token_db',
                   'USER': 'root',
                   'PASSWORD': '*********',
                   'HOST': '127.0.0.1',
                   'PORT': '3306',
                  }
              }

     

          5,  导入token模块

               修改settings.py   

        INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework.authtoken',##添加token模块
    'testtoken', ##添加我们的应用
    ]

    6,创建数据库表
    修改__init__.py

           import pymysql
           pymysql.install_as_MySQLdb()

           然后执行:       

                 python manage.py  makemigrations

              python manage.py  migrate   生成数据库表

                 python manage.py createsuperuser  创建管理员

        7,url 过滤

               修改url.py

        from django.contrib import admin
    from django.urls import path

    from testtoken import views as testtoken_views

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('testtoken/user/<str:operation>',testtoken_views.user_mgr),//添加url路径
        ]

        8,登录生成token代码

        from django.http import JsonResponse

    from rest_framework.authtoken.models import Token
    def user_login(request,name,passwd):
    result={}
    user=auth.authenticate(username=name,password=passwd)
    if user is not None and user.is_active:
    print("authenticate sucess")
    try:
    token = Token.objects.get(user=user)
    token.delete()
    token = Token.objects.create(user=user)
    except:
    token = Token.objects.create(user=user) ###同一个user每次创建出来的token不同

    print("token.key:",token.key)
    #print("token.user:", token.user.is_active)

    auth.login(request, user)
    result['status']='sucess'
    result['token'] = token.key ###返回token给客户端
    return result
    else:
    print("authenticate fail")
    result['status']='authenticate fail'
    return result

            

    def user_mgr(request,operation):
    print("upgrade operation=",operation)
    print("request.method=", request.method)
    print("request.content_type=", request.content_type)
    print("user=", request.user.username)
    print("request.path=", request.path)
    if request.method == 'POST':
    if request.body:
    body = eval(request.body)
    if operation=="login":
    name = body['name']
    passwd = body['passwd']
    result=user_login(request, name, passwd)
    return JsonResponse(result)
    else:
    result = {}
    result['status'] = 'illegal request'
    return result

    9,客户端登录测试代码
    import requests
    from http import cookiejar
      def login_simulate():    
    httprequest.cookies = cookiejar.LWPCookieJar(filename="wangliang.txt")
    data = {}
    data['name'] = admin_list[0]
    data['passwd'] = admin_list[1]
    response = httprequest.post(url_path + "testtoken/user/login", json=data, headers=header)

    print("statusCode:" , response.status_code)
    print("text = ",response.text)
    print("response",response.json())
    httprequest.cookies.save()

    url_path="http://114.115.223.53:8000/"
    admin_list=["zhangjun","zhj10231982"]
    httprequest = requests.session()
    userAgent ="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
    header = {
    "origin": url_path,
    "Referer": url_path,
    'User-Agent': userAgent,
    }
    if __name__ == '__main__':
    login_simulate()

      10,token 过期检测

        代码如下

    from django.utils.translation import ugettext_lazy as _

    from rest_framework.authentication import BaseAuthentication, TokenAuthentication
    from rest_framework.authtoken.models import Token
    from rest_framework import HTTP_HEADER_ENCODING
    from rest_framework import exceptions
    from django.utils import timezone
    from datetime import timedelta
    from django.conf import settings

    # 获取请求头里的token信息

    def get_authorization_header(request):
    """
    Return request's 'Authorization:' header, as a bytestring.
    Hide some test client ickyness where the header can be unicode.
    """
    auth = request.META.get('HTTP_AUTHORIZATION', b'')
    if isinstance(auth, type('')):
    # Work around django test client oddness
    auth = auth.encode(HTTP_HEADER_ENCODING)
    return auth


    # 自定义的ExpiringTokenAuthentication认证方式
    class ExpiringTokenAuthentication(TokenAuthentication):
    model = Token

    def authenticate(self, request):
    print("authenticate")
    auth = get_authorization_header(request)

    if not auth:
    return None
    try:
    token = auth.decode()
    except UnicodeError:
    msg = _('Invalid token header. Token string should not contain invalid characters.')
    raise exceptions.AuthenticationFailed(msg)
    print("token",token)
    return self.authenticate_credentials(token)

    def authenticate_credentials(self, key):
    model = self.get_model()
    try:
    token = model.objects.select_related('user').get(key=key)
    except model.DoesNotExist:
    raise exceptions.AuthenticationFailed(_('Invalid token.'))
    if not token.user.is_active:
    raise exceptions.AuthenticationFailed(_('User inactive or deleted.'))

    print("token.created",token.created)

    if timezone.now() > (token.created + timedelta(days=settings.TOKEN_LIFETIME)): # Token过期验证
    raise exceptions.AuthenticationFailed(_('Token has expired'))

    return (token.user, token)

    TOKEN_LIFETIME=1  ,在settings.py 中定义,表示该token能维持一天

    过期token检测调用如下:  
    auth=ExpiringTokenAuthentication()
    try:
    auth.authenticate(request)
    except Exception as e:
    print("error=%s",repr(e))

    10,客户端token发送格式
        header['Authorization']='e4998367ea41c3b60f8fb6451025303e1f5a414e'
    添加到请求头中,headers=head

         

           


    转载于:https://www.cnblogs.com/huanhuaqingfeng/p/11163926.html

    展开全文
  • 安装DjangoRestFramework pip install djangorestframework==3.9.2 pip install markdown==3.0.1 # Markdown support for the browsable API. pip install django-filter==2.1.0 # Filtering support 详细的参考...

    在这里插入图片描述

    安装DjangoRestFramework

    pip install djangorestframework==3.9.2
    pip install markdown==3.0.1     # Markdown support for the browsable API.
    pip install django-filter==2.1.0  # Filtering support
    

    详细的参考代码
    参考链接
    DjangoRestFramework教程

    展开全文
  • djangorestframework_simplejwt4.6.0与django3.2.3+python3.9.4+djangorestframework3.12.4配置(部分代码省略只展示重点部分) 虚拟环境中安装 pip3 install djangorestframework_simplejwt(这里其它配置不做详细...
  • djangorestframework安装

    千次阅读 2013-02-21 13:59:44
    https://pypi.python.org/pypi/djangorestframework/0.3.2下载 解压 python setup.py install 如果提示 ImportError: No module named setuptools 安如下步骤: wget http://pypi.python.org/packages/sourc
  • djangorestframework 序列化 序列化常用字段参数 '''1. 选项参数''' name = serializers.CharField(min_length=3,max_length=20) max_length # 最大长度 min_lenght # 最小长度 allow_blank # 是否允许为空 max_...
  • djangorestframework序列化

    2020-10-12 20:24:15
    1. djangorestframework 序列化 1.1序列化常用字段参数 '''1. 选项参数''' name = serializers.CharField(min_length=3,max_length=20) max_length # 最大长度 min_lenght # 最小长度 allow_blank # 是否允许为空 ...
  • 1.1 DjangoRestFramework基本使用 1.2 drf认证&权限 模块 1.3 djangorestframework 序列化 1.4 djangorestframework 分页 1.1 DjangoRestFramework基本使用返回顶部  1、回顾CBV基本使用 from ...
  • DjangoRestFramework中的simplejwt使用

    千次阅读 2021-06-10 01:55:31
    文章目录一级目录二级目录三级目录说明1. 安装simple模块2. 配置`settings.py`3....djangorestframework-simplejwt v4.4.0 1. 安装simple模块 方式1 直接以 pip 方式安装 E:\SweetYaya\MyProj01> pip instal
  • DjangoRestFrameWork从入门到精通源码分析 DjangoRestFrameWork从入门到精通源码分析
  • s a new version of <a href="https://pypi.python.org/pypi/djangorestframework">djangorestframework</a> available. You are currently using <strong>3.6.3</strong>. I have updated it to <strong>3.6.4...
  • djangorestframework-3.12.2
  • drf_extension djangorestframework的一些扩展
  • 环境 Ubuntu18.04 LTS Django2.0 安装虚拟环境 pip install virtualenv 创建学习目录并进入 mkdir tutorial cd tutorial 创建虚拟环境并启动 ...安装django和djangorestframework pip install django pip in...
  • 1,DjangoRestFramework基本使用 2,drf认证&权限 模块 3,djangorestframework 序列化 4,djangorestframework 分页 5,JWT:使用djangorestframework-jwt模块进行用户身份验证 1,DjangoRestFramework基本...
  • DjangoRestFramework实践笔记转载:https://blog.csdn.net/dipolar/article/details/521547521、Restful服务的实现方式一共三种:function based view,class based view,viewset+router,这三种实现方式的封装...
  • pip install djangorestframework # 开启django项目,并创建了一个django-app django-admin startproject tutorial cd tutorial django-admin startapp quickstart cd .. #启动服务 python manage.py runserver ...
  • 本文为 djangorestframework-simplejwt 使用记录。(官方文档) 1. 安装 pip install djangorestframework-simplejwt 2. 使用 创建 Django 项目及 app: # 创建名为 simple 的工程 django-admin startproject ...
  • djangorestframework-simplejwt入门教程 文章目录djangorestframework-simplejwt入门教程环境说明安装配置settings.py在 `INSTALLED_APPS` 中注册配置 `DRF`配置 `simplejwt`编写路由 urls.py创建数据库并添加用户...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,996
精华内容 1,598
关键字:

djangorestframework