Django 그래 픽(view)사용

8294 단어 Django투시도 층
보기 층(view)
보기 함수,보기 라 고 약칭 합 니 다.본질 적 으로 간단 한 Python 함수 입 니 다.웹 요청 을 받 아들 이 고 웹 응답 을 되 돌려 줍 니 다.응답 하 는 내용 은 HTML 페이지,리 셋,404 오류,그림 등 모든 것 일 수 있 지만 본질은 응답 대상 HttpResponse 를 되 돌려 주 는 것 입 니 다.
보기 함수 의 코드 는 어디 에 써 도 되 지만 프로젝트 나 응용 프로그램 디 렉 터 리 에 설 치 된 views.py 파일 로 약 속 됩 니 다.
보기 사례:

from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
import datetime

def current_datetime(request):
  now = datetime.datetime.now()
  html = "<html><body>It is now %s.</body></html>" % now
  return HttpResponse(html)
해석:
  • django.shortcuts 모듈 에서 Http Response 클래스 와 Python 의 datetime 라 이브 러 리 를 가 져 왔 습 니 다.
  • current 정의datetime 함수.그것 이 바로 보기 함수 입 니 다.모든 보기 함 수 는 HttpRequest 대상 을 첫 번 째 매개 변수 로 사용 하고 보통 request 라 고 합 니 다.보기 함수 의 이름 은 그것 을 제외 한 기능 을 반영 하면 됩 니 다
  • 보기 함 수 는 생 성 된 응답 을 포함 하여 마지막 으로 HttpResponse 대상 을 되 돌려 줍 니 다.보기 함수 마다 HttpResponse 대상 을 되 돌려 줍 니 다.
  • 1.HttpRequest 대상
    요청 대상(request)의 속성:
    django 는 요청 메시지 의 요청 줄,첫 번 째 정보,내용 테 마 를 HttpRequest 클래스 의 속성 으로 패키지 합 니 다.특수 설명 을 제외 하고 나머지 는 모두 읽 기만 한다.
    1. request.POST    # 프론트 포스트 에서 보 내 온 데 이 터 를 POST 사전 에 포장 합 니 다.
    2. request.GET     # 프론트 브 라 우 저 창 에 있 는 데 이 터 를 GET 사전 에 포장 합 니 다.
    3. request.method  # 프론트 요청 방식
    4. request.body    # post 제출 한 데이터,body 의 내용,프론트 데스크 는 name=lqz&age=18&sex=1 로 봉 인 됩 니 다.
    5. request.path  # 요청 한 경 로 를 꺼 내 데이터 부분 을 찾 을 수 없습니다.
    6. request.encoding  #제출 한 데 이 터 를 표시 하 는 인 코딩 방식 의 문자열 입 니 다.기본'utf-8'
    7. request.META  #모든 HTTP 첫 번 째 를 포함 하 는 표준 Python 사전
            CONTENT_LENGTH―요청 한 본문 길이(문자열).
            CONTENT_TYPE―요청 한 본문의 MIME 유형.
            HTTP_ACCEPT―받 아들 일 수 있 는 Content-Type 에 응답 합 니 다.
            HTTP_ACCEPT_ENCODING-받 을 수 있 는 인 코딩 에 응답 합 니 다.
            HTTP_ACCEPT_LANGUAGE―받 아들 일 수 있 는 언어 에 응답 합 니 다.
            HTTP_HOST―고객 센터 에서 보 낸 HTTP Host 머리.
            HTTP_REFERER―Referring 페이지.
            HTTP_USER_AGENT―클 라 이언 트 의 user-agent 문자열.
            QUERY_STRING―단일 문자열 형식의 조회 문자열(해석 되 지 않 은 형식).
            REMOTE_ADDR―클 라 이언 트 의 IP 주소.
            REMOTE_HOST―클 라 이언 트 의 호스트 이름.
            REMOTE_USER―서버 인증 후의 사용자.
            REQUEST_METHOD―"GET"나"POST"와 같은 문자열
            SERVER_NAME―서버 의 호스트 이름.
            SERVER_PORT―서버 의 포트(문자열).
       --------------------------------
        CONTENT 제외LENGTH 와 CONTENTTYPE 외 에 요청 한 모든 HTTP 첫 번 째 부분 이 META 키 로 바 뀌 었 을 때,
        모든 알파벳 을 대문자 로 바 꾸 고 연결 부 호 를 밑줄 로 바 꾸 고 마지막 에 HTTP  접두사.
       ---------------------------------
    8.request.FILES\#모든 업로드 파일 정 보 를 포함 합 니 다.
    9. request.COOKIES  #사전 형식,키,문자열 만 있 고 모든 쿠키 를 포함 합 니 다.
    10. request.session  #현재 세 션 은 django 에서 세 션 을 사용 할 때 만 사용 할 수 있 습 니 다.
    11.request.user(사용자 인증 구성 요소)
        하나의 AUTHUSER_MODEL 형식의 대상 은 현재 로그 인 한 사용 자 를 표시 합 니 다.
    사용자 가 현재 로그 인 하지 않 으 면 user 는 django.contrib.auth.models.AnonymousUser 의 인 스 턴 스 로 설정 합 니 다.       당신 은 is 를 통 해authenticated()구분 합 니 다.
    예 를 들 면:
    
      if request.user.is_authenticated():
        # Do something for logged-in users.
      else:
        # Do something for anonymous users.
    user 는 Django 가 Authentication Middleware 미들웨어 미들웨어 를 사용 할 때 만 사용 할 수 있 습 니 다.
    익명 사용자
    
      class models.AnonymousUser
    
      django.contrib.auth.models.AnonymousUser     django.contrib.auth.models.User      ,          :
    
        id 는 영원히 None 입 니 다.
        username 은 영원히 빈 문자열 입 니 다.
        get_username()은 빈 문자열 을 영원히 되 돌려 줍 니 다.
        is_staff 와 is슈퍼 유 저 는 영원히 false 입 니 다.
        is_active 는 영원히 False 입 니 다.
        groups 와 userpermissions 는 영원히 비어 있 습 니 다.
        is_anonymous()는 false 가 아 닌 True 로 돌아 갑 니 다.
        is_authenticated()는 True 가 아 닌 false 로 돌아 갑 니 다.
        set_password()、check_password(),save(),delete()는 NotImplemented Error 를 일 으 킵 니 다.
    New in Django 1.8: AnonymousUser.get 추가username()은 django.contrib.auth.models.User 를 더욱 잘 모 의 합 니 다.
    주:FILES 는 POST 를 요청 하고 제출 하 는 방법 만 있 습 니 다.
    enctype="multipart/form-data"가 있 는 경우 에 만
    데이터 포함.그렇지 않 으 면 FILES 는 사전 과 유사 한 빈 대상 이 될 것 이다.
    request 의 일반적인 방법:
    1. request.get_full_path()
    요청 한 경 로 를 꺼 내 면 데이터 부분 을 찾 을 수 있 습 니 다.request.path 에서 데 이 터 를 찾 을 수 없습니다.
    2. request.is_ajax()
    요청 이 XML HttpRequest 를 통 해 생 성 되 었 다 면 True 로 돌아 갑 니 다.이 방법의 역할 은 현재 요청 이 aax 메커니즘 을 통 해 보 내 졌 는 지 판단 하 는 것 이다.
    3. request.is_secure()
    Https 를 사용 하면 트 루 로 돌아 가 연결 이 안전 하 다 는 뜻 입 니 다.
    2.HttpResponse 대상
    응답 대상 은 주로 세 가지 형식 이 있 습 니 다.
  • HttpResponse()
  • render()
  • redirect()
  • 1.HttpResponse
    HttpResponse()괄호 안에 구체 적 인 문자열 을 직접 응답 체 로 합 니 다.
    2.render
    render(request,template_name,[,context])
    결합
    인자:
  • request:응답 을 생 성 하 는 요청 대상 입 니 다.
  • template_name:사용 할 템 플 릿 이름 입 니 다.
  • context:템 플 릿 컨 텍스트 에 추 가 된 사전 입 니 다.기본 빈 사전 입 니 다.사전 의 값 이 호출 될 수 있다 면 보 기 는 템 플 릿 을 렌 더 링 하기 전에 호출 됩 니 다.
  • render 방법 은 템 플 릿 페이지 의 템 플 릿 문법 을 렌 더 링 하고 html 페이지 를 응답 체 로 렌 더 링 하 는 것 입 니 다.
  • 3.redirect
    다시 지정 할 하 드 인 코딩 URL 전달
    
    def my_view(request):
      ...
      return redirect('some/url')
    
    완전한 URL 일 수도 있 습 니 다:
    
    def my_view(request):
      ...
      return redirect('http://www.baidu.com')
    
    301 과 302 의 차 이 를 재 정립 하 다.
    1)301 과 302 의 차이.
    301 과 302 상태 코드 는 모두 재 설정 을 표시 합 니 다.즉,브 라 우 저 는 서버 가 되 돌아 온 이 상태 코드 를 받 은 후에 자동 으로 새로운 URL 주소 로 이동 합 니 다.이 주 소 는 응답 하 는 Location 첫 번 째 부분 에서 얻 을 수 있 습 니 다.(사용자 가 본 효 과 는 바로 그 가 입력 한 주소 A 가 순식간에 다른 주소 B 로 변 하 는 것 입 니 다)-이것 은 그들의 공통점 입 니 다.
    그들의 차 이 는.301 은 오래된 주소 A 의 자원 이 영구적 으로 제거 되 었 음 을 나타 낸다.(이 자원 은 접근 할 수 없다)검색엔진 은 새로운 내용 을 캡 처 하 는 동시에 오래된 주 소 를 재 설정 한 사이트 로 교환 하기 도 한다.
    302 는 기 존 주소 A 의 자원 이 아직(여전히 접근 할 수 있 음)있 음 을 나타 낸다.이 재 설정 은 기 존 주소 A 에서 주소 B 로 임시 적 으로 이동 할 뿐 검색엔진 은 새로운 내용 을 캡 처 하여 오래된 주 소 를 저장 할 것 이다.SEO 302 가 301 보다 낫다.
    2)방향 을 바 꾸 는 이유:
    (1)사이트 조정(예 를 들 어 웹 디 렉 터 리 구 조 를 바 꾸 는 것);
    (2)웹 페이지 가 새 주소 로 옮 겨 집 니 다.
    (3)웹 페이지 확장자 변경(예 를 들 어.php 를.Html 또는.shtml 로 변경 해 야 함).
    이러한 상황 에서 방향 을 바 꾸 지 않 으 면 사용자 즐겨 찾기 폴 더 나 검색엔진 데이터 베이스 에 있 는 오래된 주 소 는 방문 자 에 게 404 페이지 의 오류 정 보 를 얻 게 하고 방문 데 이 터 를 헛되이 잃 게 할 수 밖 에 없다.또한 여러 도 메 인 이름 을 등록 한
    사이트 도 도 도 메 인 이름 을 방문 하 는 사용자 가 홈 페이지 로 자동 으로 이동 하도록 방향 을 바 꿔 야 한다.
    3.JSON Response 대상
    제 이 슨 형식 문자열 의 두 가지 방식 을 전단 으로 되 돌려 줍 니 다.
    
    #      
    # import json
    # data={'name':'lqz','age':18}
    # data1=['lqz','egon']
    # return HttpResponse(json.dumps(data1))
    #      
    from django.http import JsonResponse
    # data = {'name': 'lqz', 'age': 18}
    data1 = ['lqz', 'egon']
    # return JsonResponse(data)
    return JsonResponse(data1,safe=False)
    
    넷 째,CBV 와 FBV
    CBV 는 클래스 기반 보기(Class base view)와 FBV 함수 기반 보기(Function base view)
    
    from django.views import View
    class AddPublish(View):
      def dispatch(self, request, *args, **kwargs):
        print(request)
        print(args)
        print(kwargs)
        #            ,      
        obj=super().dispatch(request, *args, **kwargs)
        return obj
    
      def get(self,request):
        return render(request,'index.html')
      def post(self,request):
        request
        return HttpResponse('post')
    
    
    5.간단 한 파일 업로드
    
    def fileupload(request):
      if request.method=='GET':
        return render(request,'fileupload.html')
      if request.method=='POST':
        # FILES
        print(request.FILES)
        print(type(request.FILES.get('myfile')))
        #         ,      
        myfile=request.FILES.get('myfile')
        from django.core.files.uploadedfile import InMemoryUploadedFile
        #     
        name=myfile.name
        #     ,            
        with open(name,'wb') as f:
          # for line in myfile.chunks():
          for line in myfile:
            f.write(line)
        return HttpResponse('ok')
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기