Skip to main content

Django REST_framework APIView

Project description

https://travis-ci.org/007gzs/django_restframework_apiview.svg?branch=master

Screenshots

https://github.com/007gzs/django_restframework_apiview/raw/master/img/demo.jpg

Use in your app

Install using pip:

pip install django_restframework_apiview

Add ‘apiview’ to your INSTALLED_APPS setting:

INSTALLED_APPS = (
    ...
    'apiview',
)

JSONP Renderer And debug apiview with paramslist:

REST_FRAMEWORK = {
    ...
    'DEFAULT_RENDERER_CLASSES': [
        ...
        'apiview.renderers.JSONPRenderer',
    ],
}
if DEBUG:
    REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'].append('apiview.renderers.BrowsableAPIRenderer')

Add error code to settings.py:

ERROR_CODE_DEFINE = (
    ('ERR_AUTH_NOLOGIN',            10001,  'No login'),
    ('ERR_AUTH_USER_EXISTS',        10002,  'User name has exists'),
    ('ERR_AUTH_USER_NOT_EXISTS',    10003,  'User not exists'),
    ('ERR_AUTH_PASSWORD',           10005,  'Password error'),
)

edit myapp/views.py:

#! usr/bin/env python
# encoding: utf-8
from __future__ import absolute_import, unicode_literals

from django.db import IntegrityError, transaction
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from apiview.err_code import ErrCode
from apiview.exceptions import CustomError
from apiview.view import APIView
from apiview.views import ViewSite
from apiview.views import fields


site = ViewSite(name='base', app_name='base')


class APIBase(APIView):

    class Meta:
        path = '/'
        param_fields = (
            ('channel', fields.CharField(help_text='App Channel', required=False)),
            ('version', fields.CharField(help_text='App Version', required=False)),
        )


class UserAPIBase(APIBase):

    def check_user_permission(self, request):
        user = request.user
        if not user.is_authenticated() or not isinstance(user, User):
            raise CustomError(ErrCode.ERR_AUTH_NOLOGIN)

    def view(self, request, *args, **kwargs):
        self.check_user_permission(request)
        return super(APIBase, self).view(request, *args, **kwargs)

    class Meta:
        path = '/user'


@site
class Login(APIBase):

    name = '用户登陆'

    def get_context(self, request, *args, **kwargs):
        user = authenticate(username=request.params.username, password=request.params.password)
        if user is None:
            raise CustomError(ErrCode.ERR_AUTH_PASSWORD)
        login(request, user)
        return self.get_default_context(user_info={'username':request.user.username, 'email':request.user.email})

    class Meta:
        path = 'user/login'
        param_fields = (
            ('username', fields.CharField(help_text='用户名')),
            ('password', fields.CharField(help_text='密码')),
        )


@site
class Register(APIBase):

    name = '用户注册'

    def get_context(self, request, *args, **kwargs):
        try:
            user = User.objects.create_user(request.params.username, request.params.email, request.params.password)
        except IntegrityError:
            raise CustomError(ErrCode.ERR_AUTH_USER_EXISTS)
        return self.get_default_context()

    class Meta:
        path = 'user/register'
        param_fields = (
            ('username', fields.RegexField(help_text='用户名', regex=r'^[a-zA-Z0-9_]{3,10}$')),
            ('password', fields.CharField(help_text='密码')),
            ('email', fields.EmailField(help_text='Email')),
        )

@site
class Info(UserAPIBase):

    name = '用户信息'

    def get_context(self, request, *args, **kwargs):
        user_info = {'username':request.user.username, 'email':request.user.email}

        return self.get_default_context(user_info=user_info)


@site
class Logout(UserAPIBase):

    name = '退出登陆'

    def get_context(self, request, *args, **kwargs):
        logout(request)

        return self.get_default_context()

urlpatterns = site.urlpatterns

add to urls.py end:

urlpatterns.append(url(r’^test/’, include(“myapp.views”)))

Example

run example:

git clone https://github.com/007gzs/django_restframework_apiview.git
cd django_restframework_apiview/example
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
open http://127.0.0.1:8000/example.html in browser
api demo::

http://127.0.0.1:8000/example/param_filed_info

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apiview-1.3.25.tar.gz (60.9 kB view details)

Uploaded Source

File details

Details for the file apiview-1.3.25.tar.gz.

File metadata

  • Download URL: apiview-1.3.25.tar.gz
  • Upload date:
  • Size: 60.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.4

File hashes

Hashes for apiview-1.3.25.tar.gz
Algorithm Hash digest
SHA256 1b5445f16fbc5fbe83da5ef355d2251d1e19abee44d35824d90ccc8b67bc387c
MD5 9c39b49544e1da7835879d02552b8360
BLAKE2b-256 dfb5c3555e1fdabc4c424a3e1b36fe706007ef61f672063ef1f8f6e5d8b67d8d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page