Skip to main content

Django REST_framework APIView

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

Metadata

Release files for django-restframework-apiview 1.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-restframework-apiview 1.4.3
File Size Uploaded Provenance Actions
django_restframework_apiview-1.4.3.tar.gz 60.2 kB Without provenance Details for django_restframework_apiview-1.4.3.tar.gz

Release files / django_restframework_apiview-1.4.3.tar.gz

Download URL django_restframework_apiview-1.4.3.tar.gz
Size 60.2 kB
Tags Source
SHA-256 checksum
How to use checksums
72c00dde2829be97fe8d653c4ab8654871c64b101889fa820b1229d2c4c7a57d
BLAKE2b-256 checksum
How to use checksums
c4062003b70f1c435e7484c84740bfd22fd84faf022311cc525472ac76144865
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for django-restframework-apiview 1.4.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.4.3 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page