Django 에서 인자 가 져 오기 (경로, 조회, 요청 헤더, 요청 체)

5170 단어
1. 보통 HTTP 프로 토 콜 이 서버 에 전달 하 는 몇 가지 경로 가 있 습 니 다.
  URL     , /weather/shanghai/2018,                   ;

     (query string),  key1=value1&key2=value2;

   (body)      ,      、json、xml;

 http    (header) 。

1. URL 에서 인자 가 져 오기
경로 URL 을 정의 할 때 정규 표현 식 에서 파 라 메 터 를 추출 하 는 방법 으로 URL 에서 요청 파 라 메 터 를 가 져 올 수 있 습 니 다. Django 는 추출 한 파 라 메 터 를 보기 의 전송 매개 변수 에 직접 전달 합 니 다.
1. 이름 없 는 매개 변 수 는 정의 순서에 따라 전달
메모: 매개 변수 가 가 져 온 순서 와 url 의 매개 변수 위치 가 일일이 대응 하여 교환 할 수 없습니다.
url(r'^users/([a-z]+)/(\d{4})/$', views.get_user),
 
def get_user(request, name, ID):
    print('name=%s' % name)
    print('id=%s' % id)
    return HttpResponse('OK')

1.2 이름 매개 변 수 는 이름 으로 전달
메모: 경로 에서 매개 변수의 이름 을 지정 하면 name 에서 매개 변 수 를 받 을 때 경로 에서 지정 한 매개 변수 이름 을 사용 해 야 합 니 다. 다른 이름 으로 바 꿀 수 없습니다. 이때 두 매개 변수 위 치 는 바 꿀 수 있 습 니 다.
url(r'^users/(?P[a-z]+)/(?P\d{4})/$', views.users),
 
def weather(request, name, id):
    print('name=%s' % name)
    print('id=%s' % id)
    return HttpResponse('OK')

2. 요청 경로 의 검색 문자열 인자 (예: k1 = v1 & k2 = v2) 를 가 져 오 면 request. GET 속성 을 통 해 QueryDict 대상 을 되 돌려 줍 니 다.
무엇이 Query Dict 대상 입 니까?
django. http. QueryDict 에 정의
HttpRequest 대상 의 속성 GET, POST 는 모두 QueryDict 형식의 대상 입 니 다.
python 사전 과 달리 QueryDict 형식의 대상 은 같은 키 에 여러 개의 값 이 있 는 경 우 를 처리 합 니 다.
2.1 방법 get (): 키 에 따라 값 을 얻는다.
  • 한 키 에 여러 개의 값 이 동시에 있 으 면 마지막 값 을 가 져 옵 니 다
  • 키 가 존재 하지 않 으 면 None 값 을 되 돌려 주 고 기본 값 을 설정 하여 후속 처 리 를 할 수 있 습 니 다
  • dict.get('key',value)==>    : dict['key']

    2.2 방법 getlist (): 키 에 따라 값 을 얻 고 목록 으로 값 을 되 돌려 주 며 지정 한 키 의 모든 값 을 얻 을 수 있 습 니 다.
    키 가 존재 하지 않 으 면 빈 목록 [] 으로 돌아 가 기본 값 을 설정 하여 후속 처 리 를 할 수 있 습 니 다.
    dict.getlist(' ',   )
    

    2.3 매개 변수 인 스 턴 스 가 져 오기
    접근 경로: / user / qs /? a = 1 & b = 2 & a = 3
    메모: 검색 문자열 은 요청 방식, 클 라 이언 트 GET, POST 방식 의 요청 을 구분 하지 않 고 request. GET 를 통 해 요청 한 검색 문자열 데 이 터 를 가 져 올 수 있 습 니 다.
    url(r'^qs/$',views.get_value,name='g_v'),
     
    def get_value(request):
        a = request.GET.get('a')  #3
        b = request.GET.get('b')  #2
        num_list = request.GET.getlist('a') #['1','3']
        print(a)
        print(b)
        print(num_list)
     
        return HttpResponse(reverse('user:get_value'))

    3. 요청 체 의 인자
    3.1 폼 데이터 획득
    request. POST 를 통 해 가 져 오기
    주의: Django 는 기본적으로 CSRF 보 호 를 열 었 습 니 다. 상기 요청 방식 에 대해 CSRF 보호 검증 을 실시 할 것 입 니 다. 테스트 를 개발 할 때 CSRF 보호 체 제 를 닫 을 수 있 습 니 다. 방법 은 settings. py 파일 에 CSRF 중간 부품 을 주석 하 는 것 입 니 다.
    url(r'^getbody/$',views.get_body),
     
    def get_body(request):
        form_data = request.POST.get('c')
        print(form_data)
        return HttpResponse(form_data)
    

    3.2 비 폼 데이터 획득
    폼 형식 이 아 닌 요청 체 데 이 터 는 Django 가 자동 으로 해석 할 수 없 으 며, request. body 속성 을 통 해 가장 원시 적 인 요청 체 데 이 터 를 가 져 와 요청 체 형식 (JSON, XML 등) 에 따라 스스로 해석 할 수 있 습 니 다.request. body bytes 형식 되 돌리 기
    import json
     
    url(r'^getjson/$',views.get_body_json),
     
    def get_body_json(request):
        #            
        json_str = request.body
        print(json_str)                     # b'{
    "f":200,
    "d":300

    }'\ # , json json_str = json_str.decode() print(json_str) # {"f":200,"d":300} # json json_data = json.loads(json_str) print(json_data) # {'f': 200, 'd': 300} # json , print(json_data['d']) # 300 print(json_data['f']) # 200 return HttpResponse('ok')

    4. 예 를 들 어 Django 가 http 요청 헤더 내용 가 져 오기
    view 함수 로 전 달 된 reuqest 는 request. META. get ("header key") 을 사용 하여 가 져 옵 니 다.
    주의:
        header key 는 대문자 로 써 야 합 니 다. 접 두 사 는 "HTTP" 여야 합 니 다. 뒤에 연결 문자 가 가로줄 "-" 이면 밑줄 "" 로 바 꿔 야 합 니 다.예 를 들 어 헤더 의 키 는 api 입 니 다.auth, 그러면 Django 에서 request. META. get ("HTTP API AUTH") 을 사용 하여 요청 헤더 의 데 이 터 를 가 져 와 야 합 니 다.
    5. 기타 상용 HttpRequest 대상 속성
    request. method 요청 방식
    request. path 요청 경로
    request. user 가 요청 한 사용자 대상
    request. FILES 사전 과 유사 한 대상 으로 모든 업로드 파일 을 포함 합 니 다.
    request. encoding 은 요청 한 페이지 의 전체 경 로 를 표시 하 는 문자열 입 니 다. 도 메 인 이름과 인자 부분 은 포함 되 지 않 습 니 다.
    url(r'^otherattr/$', views.other_attr),
     
    def other_attr(request):
        print(request.method)    # POST
        print(request.path)      # /user/otherattr/
        print(request.encoding)  # None:            ,   utf-8,        ,
        #                      ,                encoding 。
    

      
     
      

    좋은 웹페이지 즐겨찾기