Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

django-restframework-apiview

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

django-restframework-apiview

Django REST_framework APIView

  • 1.4.3
  • PyPI
  • Socket score

Maintainers
1

############################# Django REST_framework APIView ############################# .. image:: https://travis-ci.org/007gzs/django_restframework_apiview.svg?branch=master :target: https://travis-ci.org/007gzs/django_restframework_apiview


Screenshots


.. image:: 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

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc