python 사용법 - django 2.0에서는 urls.py에서 path()또는 url()을 사용하는 것이 더 좋습니까?




차이 정규식 (5)

django 온라인 강좌에서 강사는 url() 함수를 사용하여보기를 호출하고 urlpatterns 목록의 정규 표현식을 사용합니다. 나는 이것에 대한 다른 예제를 YouTube에서 보았습니다. 예

from django.contrib import admin
from django.urls import include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]


#and in polls/urls.py

urlpatterns = [        
    url(r'^$', views.index, name="index"),
]

그러나 Django 튜토리얼을 진행할 때 대신 path() 를 사용 path() .

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]

path(r'^$', views.index, name="index") 를 사용하면 mysite.com/polls/ 가 표시되지 않으므로 정규 표현식이 path() 함수와 작동하지 않는 것 같습니다.

정규 표현식없이 올바른 방법으로 path() 를 사용하고 있습니까? url() 더 강력하지만 더 복잡하여 path() 를 사용하여 우리를 시작합니다. 또는 다른 직업에 대한 다른 도구의 경우입니까?


Answers

path(r'^$', views.index, name="index") 와 같은 정규 표현식은 path() 함수와 함께 작동하지 않는 것 같습니다.

그것은 다음과 같아야합니다 : path('', views.index, name="index") .

정규 표현식을 입력하려면 첫 번째 인수는 공백이어야합니다.


Path는 Django 2.0의 새로운 기능입니다. 여기에 설명되어 있습니다 : https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

좀 더 파이썬적인 방법처럼 보이고, 당신이보기 위해 전달한 인자에서 정규 표현식을 사용하지 못하게 할 수 있습니다 ... 예를 들어 int () 함수를 사용할 수 있습니다.


새로운 django.urls.path() 함수는 더 간단하고 읽기 쉬운 URL 라우팅 구문을 허용합니다. 예를 들어, 이전 Django의 예제는 다음과 같습니다.

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

다음과 같이 쓸 수 있습니다 :

path('articles/<int:year>/', views.year_archive),

이전 버전의 django.conf.urls.url () 함수는 이제 django.urls.re_path() 로 사용할 수 있습니다. 이전 위치는 구형 호환성을 위해 남아 있으며, 절박한 지원 중단이 필요하지 않습니다. 이전 django.conf.urls.include () 함수는 이제 django.urls 에서 가져올 수 있으므로 django.urls import include , path , re_path를 URLconfs 에서 사용할 수 있습니다.

추가 읽기 django doc


path 는 Django 2.0에서 새롭게 추가 된 것으로, 몇 주 전에 릴리스되었습니다. 대부분의 자습서는 새 구문에 대해 업데이트되지 않았습니다.

그것은 분명히 일을하는 더 간단한 방법이라고 생각되었습니다. 나는 URL이 더 강력하다고는 말할 수 없지만 두 형식 중 하나로 패턴을 표현할 수 있어야한다.


모델의 validate_unique 메서드를 재정의합니다. 유효성을 검사 할 때 현재 개체를 무시하려면 다음을 사용할 수 있습니다.

from django.db.models import Model, DateTimeField
from django.core.validators import NON_FIELD_ERRORS, ValidationError

class MyModel(Model):
    start_date = DateTimeField()
    end_date = DateTimeField()

    def validate_unique(self, *args, **kwargs):
        super(MyModel, self).validate_unique(*args, **kwargs)

        qs = self.__class__._default_manager.filter(
            start_date__lt=self.end_date,
            end_date__gt=self.start_date
        )

        if not self._state.adding and self.pk is not None:
            qs = qs.exclude(pk=self.pk)

        if qs.exists():
            raise ValidationError({
                NON_FIELD_ERRORS: ['overlapping date range',],
            })

ModelFormfull_clean() 을 통해 이것을 자동으로 호출합니다. 수동으로도 사용할 수 있습니다.

PPR은 간단하고 정확한 범위 중복 조건에 대한 좋은 토론을하고 있습니다 .





python django django-urls