Python 3 Django 의 View 상세 설명

22250 단어 Python
Python 3 Django 의 View 상세 설명
이 글 은 Luzhuo 에서 작 성 했 습 니 다. 이 메 시 지 를 보관 하 십시오.
다음 코드 는 Python 3.6.1 을 예 로 들 면 Less is more!Python 3.6.1 Django 2.0.2 프로젝트 명: Djangoview 응용 프로그램 이름: booktest
URLconf
경로 설정 URL
  • 루트 찾기: http://blog.csdn.net/Rozol/article/details/79526328manage.py - > __main__ - > Django_view.settingssettings.py - > ROOT_URLCONF = 'Django_view.urls' 에서 설정 하면 루트 경로
  • 응용 프로그램 에서 만 들 기 urls.py 이 응용 프로그램의 관련 경 로 를 저장 하 는 데 사용 합 니 다.
  • 프로젝트 의 urls.py 파일 에 있 는 urls.py 목록 에 추가 urlpatterns 하면 이 응용 프로그램 과 관련 된 url 은 모두 이 응용 프로그램 path('booktest/', include('booktest.urls')) 과 일치 합 니 다
  • 중복 개발 절차
  • views. py 작성
  • urls.py

  • 응용 def index(request): passurls.py 추가 경로
  • urlpatterns


  • 서버 시작 path('', views.index),
  • 경로 일치
    from django.urls import path, register_converter, re_path
    from . import views, converters
    
    #         
    register_converter(converters.NumberConverter, 'mt')
    
    '''
    <>   url     
         
        ---    ---
        str:    
        int: int  
        slug: ASCII  +  +   +         ,   : a-b-c1-d
        uuid: UUID(    -,     ),   : 123a-213b-22d2f
        path:          ( '/')
        
        ---     ---
        converters      -> register_converter   ->   
        
        ---    ---
          re_path  ,   : ?Ppattern
        
        URL
        1.   path      path('', views.index, name='index')
        2.    reverse('year', args=(year,))     
    '''
    urlpatterns = [
        path('', views.index, name='index'),  #     
        path('', views.detail, name='detail'),  #      
        path('times///', views.times, name='times'),  # name        
    
        path('mon/', views.mon, name="mon"),  #         
        re_path('times/(?P[0-9]{4})/(?P[0-9]{2})/', views.times, name='times'),  #      ,         
    
        path('year//', views.year, name='year'),  #     URL
    ]
    
    -
    
    #         
    class NumberConverter:
        regex = '[0-9]{2}'  #      
    
        #              view   ,      ValueError  
        def to_python(self, value):
            return int(value)
    
        #  Python      URL       
        def to_url(self, value):
            return '%d' % value
    

    오류 보기 설정
  • 템 플 릿 경로 설정: python manage.py runserver 80 에서 수정: settings.py
  • 디 버 깅 모드 수정: 'DIRS': [os.path.join(BASE_DIR), 'templates'], 에서 수정: settings.py
  • 호스트 에 요청 할 수 있 는 변경 사항: DEBUG = False 에서 수정: settings.py
  • 오류 보기 만 들 기: 404 (페이지 분실) / 500 (서비스 오류) / 400 (요청 오류) / 403 (권한 부족)
  • HttpRequest 요청 대상
    # --- Request ---
    '''
    Request    
    request.path  #      
    request.method  # GET/ POST
    request.encoding  #    ,   utf8
    request.GET  # get     
    request.POST  # post     
    request.FILES  #        
    request.COOKIES  #    cookie
    request.session  #     
    '''
    # --- GET ---
    def get_request(request):
        # /getrequest/?a=1&b=2         
        a = request.GET['a']
        b = request.GET['b']
        c = 0
        # return HttpResponse("a: {}, b:{}, c:{}".format(a, b, c))  # a: 1, b:2, c:0
    
        # /getrequest/?a=1&a=2&b=3          
        a_all = request.GET.getlist('a')
        # return HttpResponse("a_all: {}".format(a_all))  # a_all: ['1', '2']
    
    
    
    #       post    ( :                {% csrf_token %} )
    def post_test(request):
        return render(request, 'booktest/posttest.html')
    
    # --- POST ---
    '''
        
        response.content:      
        response.charset:    
        response.status_code:      
        content-type:    MIME  
    
        
        response.write(content):  
        response.flush():      
        response.set_cookie(key, value='', max_age=None, expires=None):  cookie, max_age int  , expires datetime  ,    
        response.delete_cookie(key):   cookie
    '''
    def post_request(request):
        name = request.POST['name']
        hobby = request.POST.getlist('hobby')
        return HttpResponse("name: {}, hobby:{}".format(name, hobby))
    

    JSon 데이터 수신
  • POST 방식 으로 Django 를 방문 할 때 ALLOWED_HOSTS = ['*'] 가 아니라면 데이터 ()
  • 를 얻 지 못 합 니 다.
  • 처리 방식 을 참고 할 수 있 습 니 다.
  • HTTP 응답 대상
    # --- Response ---
    def response(request):
        # response = HttpResponse()
        # response.set_cookie('key', 'value')
        # return response
    
        #    HttpResponseRedirect    (  : redirect)
        # return redirect(reverse('post_test', args=()))
    
        #    JsonResponse   json  
        # return JsonResponse({'key': 'value'})
    
        #        
        return render(request, 'booktest/posttest.html', {'key': 'value'})
    

    session 현재 세 션 대상
    # ---      ---
    '''
    settings.py INSTALLED_APPS  'django.contrib.messages' (    )
    MIDDLEWARE  'django.contrib.sessions.middleware.SessionMiddleware' (    )
      session           
    
        :
        get(key, default=None):   key     value
        has_key(key):      key
        set_expiry(0):   session    :   -   , int- , timedelta(days=5)-     , 0-     , None-   
        clear():       
        flush():          Cookie
        del request.session['member_id']:       
    
    session     (`settings.py`   )
        SESSION_ENGINE='django.contrib.sessions.backends.db'  #   ,       
        SESSION_ENGINE='django.contrib.sessions.backends.cache'  #      
        SESSION_ENGINE='django.contrib.sessions.backends.cached_db'  #           
    '''
    def session(request):
        #   (    )
        request.session['name'] = 'abcde'
    
        name = ' '
    
        #   (    )
        boolean = request.session.has_key('name')
        if boolean:
            name = request.session['name']
            request.session.set_expiry(0)
    
        return render(request, 'booktest/session.html', {'name': name})
    

    POST 가 Model 에 데 이 터 를 저장 해 달라 고 요청 한 사례
    import sys
    
    import django
    from django.shortcuts import render
    from django.http import *
    import json
    from AppRecorder.models import *
    
    def update(request):
    
        for key in request.POST.items():
            response_json = key[0]
            break
    
        fail = []
        for item_json in json.loads(response_json):
    
            try:
                bean = AppInfo()
                bean.app_icon = item_json['icon']
                bean.app_name = item_json['name']
                bean.app_version = item_json['version']
                bean.app_packageName = item_json['packageName']
                bean.app_addTime = item_json['addTime']
    
                bean.app_mark = MarkShelf.objects.first()
                bean.app_type = TypeShelf.objects.first()
                bean.app_category = CategoryShelf.objects.first()
    
                bean.save()
    
                print(bean)
            except django.db.utils.IntegrityError:
                print("      ,       : {}".format(bean.app_packageName))
            except:
                fail.append(bean.app_packageName)
                types, value, back = sys.exc_info()
                sys.excepthook(types, value, back)
    
        fail_json = json.dumps(fail, indent=4, default=lambda obj: obj.__dict__)
        return HttpResponse(fail_json)
    

    좋은 웹페이지 즐겨찾기