I am trying to do simple crud demo project API's for mobile using django rest framework and getting below error
django.core.exceptions.ImproperlyConfigured: The included URLconf '' does not appear to have any patterns in it. If you see valid patterns in the file then the issue is probably caused by a circular import.
Project Name : crud_demo
App Name : crud_operations
crud_demo/urls.py
from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns= [
url(r'^admin/', admin.site.urls),
url(r'^crud_operations/', include('crud_operations.urls')),
]
crud_operations/models.py
from django.db import models
# Create your models here.
class Member(models.Model):
firstname = models.CharField(max_length=40)
lastname = models.CharField(max_length=40)
crud_operations/serializers.py
from crud_operations.models import Member
from rest_framework import serializers
class MemberSerializer(serializers.ModelSerializer):
class Meta:
model = Member
fields = ('firstname', 'lastname')
crud_operations/urls.py
from crud_operations import views
urlpatterns = [
url(r'^models/$', include(views.model_list)),
url(r'^models/(?P<pk>[0-9]+)$', include(views.model_detail)),
]
crud_operations/views.py
from django.shortcuts import render, redirect
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Member
from crud_operations.serializers import MemberSerializer
@api_view(['GET', 'POST'])
def model_list(request):
if request == 'GET':
member = Member.objects.all()
serializer = MemberSerializer(member)
return Response(serializer.data)
elif request == 'POST':
serializer = MemberSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
return Response({'key': request}, status=status.HTTP_200_OK)
@api_view(['GET', 'PUT', 'DELETE'])
def model_detail(request, pk):
try:
member = Member.objects.get(pk=pk)
except Member.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request == 'GET':
serializer = MemberSerializer(member)
return Response(serializer.data)
elif request == 'PUT':
serializer = MemberSerializer(member, data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
member.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
return Response({'key': 'value'}, status=status.HTTP_200_OK)
EDIT for Rohan Varma Answer
After changed crud_demo/urls.py
from crud_operations import views
urlpatterns = [
url(r'^models/$', views.model_list),
url(r'^models/(?P<pk>[0-9]+)$', views.model_detail),
]
EDIT For Exprator Answer
After changed crud_demo/urls.py
from crud_operations import views
urlpatterns = [
path(r'^models/$', views.model_list),
path(r'^models/(?P<pk>[0-9]+)$', views.model_detail),
]
Best Answer
if you are using django 2.0.1 you should be aware that django has changed its urlpatterns from django 2.0 use the below code in your urls and remove that admin.autodiscover() as its not needed
change this line
to
and
to