1

J'ai dans mon projet dans le fichier principal urls.py les éléments suivants:Django Rest Framework - principal HTTP URL/1.1" 404 Not Found

# REST Framework packages 
from rest_framework import routers 
router = routers.DefaultRouter() 

# ... My viewsets serialized 
router.register(r'users', UserViewSet) 
# ... Another viewsets 
urlpatterns = [ 

    url(r'^$', HomeView.as_view(), name='home'), 
    # Home url in my project   

    url(r'^', include('userprofiles.urls')), 
    # Call the userprofiles/urls.py application 

    url(r'^pacientes/', include('userprofiles.urls', namespace='pacientes')), 
    # Patients url 

    url(r'^api/', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
    # Rest frameworks urls 
] 

Jusqu'à ici, quand je tape dans mon navigateur appelant à mon serveur local http://localhost:8000/api/ Je reçois cette réponse comme:

[08/Dec/2016 16:39:42] "GET /api/ HTTP/1.1" 200 7084 

Et mon repos url's modèles sérialisés apparaissent

Après, j'ai créé un ajout d'URL al dans l'application userprofiles/urls.py avec une expression régulière de cette façon:

from .views import PatientDetail 
urlpatterns = [ 
    url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail'), 

] 

Et, quand je vais à http://localhost:8000/api/ je reçois cette réponse:

Not Found: /api/ 
[08/Dec/2016 16:42:26] "GET /api/ HTTP/1.1" 404 1753 

Mon repos frameworks URL ne se trouve pas et dans mon navigateur , indiquer que l'URL qui font appel à PatientDetailView est l'origine de ce problème:

enter image description here

Mon Patien tDetailView ont les suivantes:

class PatientDetail(LoginRequiredMixin, DetailView): 
    model = PatientProfile 
    template_name = 'patient_detail.html' 
    context_object_name = 'patientdetail' 

    def get_context_data(self, **kwargs): 
     context=super(PatientDetail, self).get_context_data(**kwargs) 
    # And other actions and validations here in forward ... 

Dans mes expressions régulières définies dans userprofiles/urls.py que je fais:

url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail') 

Le PatientProfile modèle ont un champ slug (nom d'utilisateur du patient). Je passe cette limace dans l'url.

En outre je veux que permettez-moi les caractères alphanumériques majuscules et minuscules avec le paramètre [\w\-], et permettez des caractères de soulignement et de tiret et beaucoup de fois.

Est-il possible que mon expression régulière soit à l'origine du problème? Que peut-il se passer par rapport à mon /api django-restframework url être introuvable?

Répondre

1

api correspond à l'expression régulière [\w\-]+ en utilisant 'userprofiles.urls'. Ainsi, lorsque vous tapez http://localhost:8000/api/ Django renvoie d'abord urlpattern qui est url(r'^', include('userprofiles.urls')). Essayez d'échanger des lignes:

url(r'^pacientes/', include('userprofiles.urls', namespace='pacientes')), 
# Patients url 
url(r'^api/', include(router.urls)), 
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
url(r'^', include('userprofiles.urls')), 
1

L'ordre dans lequel vous définissez vos URL est important. Django essaie de faire correspondre votre URL à tous les modèles jusqu'à ce que l'un d'eux apparaisse.

Notez que vous avez inclus cette ligne:

url(r'^', include('userprofiles.urls')), 

avant:

url(r'^api/', include(router.urls)), 

qui n'a pas été un problème parce que le premier motif de match était celui-ci.

Cependant, lorsque vous avez ajouté le modèle d'URL PatientDetail vue:

url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail') 

/api/ était un match. Ainsi, la vue PatientDetail a été appelée et votre erreur 404 s'est produite car aucun patient n'a été trouvé avec le nom d'utilisateur api, pas parce que l'URL n'a pas été trouvée.