Skip to content

Instantly share code, notes, and snippets.

@Ronald-TR
Last active September 22, 2017 02:46
Show Gist options
  • Save Ronald-TR/d1c41e1f7612462bea97010c0eb1055a to your computer and use it in GitHub Desktop.
Save Ronald-TR/d1c41e1f7612462bea97010c0eb1055a to your computer and use it in GitHub Desktop.
urls_viewsGenerator
from django.__main__ import management
from importlib import *
import os
urlpatterns = """from django.conf.urls import url
from django.contrib import admin
from {pathapp}._views import *
urlpatterns = [
{urls}
]
"""
rawurls = """
url(r'^{urlname}/$', view{urlname}, name='{urlname}'),
"""
reservednames = [
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'unicode_literals',
'models',
]
views = """from {dirApp}._models import *
from django.core import serializers
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import json
{indview}
"""
rawview = """
@csrf_exempt
def view{classname}(requests):
if requests.method == 'POST':
modelo = {classname}.objects.filter(**json.loads(requests.body))
return HttpResponse(serializers.serialize("json", modelo), content_type='application/json')
if requests.method == 'GET':
return HttpResponse('erro, verbo indisponivel', 404)
"""
INSTALLED_APPS = management.settings.INSTALLED_APPS
projectapps = [app for app in INSTALLED_APPS if not app.__contains__('django.contrib')]
dirDosApps = [os.path.dirname(__file__) + '/' + app.replace('.', '/') for app in projectapps]
for index, app in enumerate(projectapps):
djangoapp = None
djangoapp = import_module(app + '._models')
urls = ''
indview = ''
listclasses = [i for i in dir(djangoapp) if not reservednames.__contains__(i)]
for classe in listclasses:
urls = urls + rawurls.format(**{'urlname': classe})
indview = indview + rawview.format(**{'classname': classe})
with open(dirDosApps[index] + '/_urls.py', 'w') as p:
p.write(urlpatterns.format(**{'urls': urls, 'pathapp': app}))
with open(dirDosApps[index] + '/_views.py', 'w') as p:
p.write(views.format(**{'dirApp': app, 'indview': indview}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment