Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Django£¨Öмä¼þ£©
 
×÷ÕߣºSmllNine
  1485  次浏览      28
 2019-11-4
 
±à¼­ÍƼö:
ÎÄÕÂÖ÷Òª½²ÊöÖмä¼þµÄ¸ÅÄî ×Ô¶¨ÒåÖмä¼þ
Öмä¼þÓ¦Óó¡¾°£¬Ï£Íû¶Ô´ó¼ÒÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þç÷ç÷±à¼­£¬ÍƼö¡£

Öмä¼þµÄ¸ÅÄî

Öмä¼þ¹ËÃû˼Ò壬ÊǽéÓÚrequestÓëresponse´¦ÀíÖ®¼äµÄÒ»µÀ´¦Àí¹ý³Ì£¬Ïà¶Ô±È½ÏÇáÁ¿¼¶£¬²¢ÇÒÔÚÈ«¾ÖÉϸıädjangoµÄÊäÈëÓëÊä³ö¡£ÒòΪ¸Ä±äµÄÊÇÈ«¾Ö£¬ËùÒÔÐèÒª½÷É÷ʵÓã¬Óò»ºÃ»áÓ°Ïìµ½ÐÔÄÜ¡£

DjangoµÄÖмä¼þµÄ¶¨Ò壺

Middleware is a framework of hooks into
Django¡¯s request/response processing.
It¡¯s a light, low-level ¡°plugin¡±
system for globally altering
Django¡¯s input or output.

Èç¹ûÄãÏëÐÞ¸ÄÇëÇó£¬ÀýÈç±»´«Ë͵½viewÖеÄHttpRequest¶ÔÏó¡£ »òÕßÄãÏëÐÞ¸Äview·µ»ØµÄHttpResponse¶ÔÏó£¬ÕâЩ¶¼¿ÉÒÔͨ¹ýÖмä¼þÀ´ÊµÏÖ¡£

¿ÉÄÜÄ㻹ÏëÔÚviewÖ´ÐÐ֮ǰ×öһЩ²Ù×÷£¬ÕâÖÖÇé¿ö¾Í¿ÉÒÔÓà middlewareÀ´ÊµÏÖ¡£

DjangoĬÈϵÄMiddleware£º

MIDDLEWARE = [
'django.middleware.security.
SecurityMiddleware',
'django.contrib.sessions.middleware.
SessionMiddleware',
'django.middleware.common.
CommonMiddleware',
'django.middleware.csrf.
CsrfViewMiddleware',
'django.contrib.auth.middleware.
AuthenticationMiddleware',
'django.contrib.messages.middleware.
MessageMiddleware',
'django.middleware.clickjacking.
XFrameOptionsMiddleware',
]

ÿһ¸öÖмä¼þ¶¼ÓÐ×Ô¼º¾ßÌåµÄ¹¦ÄÜ¡£

×Ô¶¨ÒåÖмä¼þ

Öмä¼þÖпÉÒÔ¶¨Òå5¸ö·½·¨£¬·Ö±ðÊÇ£º

process_request(self,request)

process_view(self, request, callback, callback_args, callback_kwargs)

process_template_response(self,request,response)

process_exception(self, request, exception)

process_response(self, request, response

1¡¢process_request£¬process_response

µ±Óû§·¢ÆðÇëÇóµÄʱºò»áÒÀ´Î¾­¹ýËùÓеĵÄÖмä¼þ£¬Õâ¸öʱºòµÄÇëÇóʱprocess_request,×îºóµ½´ïviewsµÄº¯ÊýÖУ¬viewsº¯Êý´¦Àíºó£¬ÔÚÒÀ´Î´©¹ýÖмä¼þ£¬Õâ¸öʱºòÊÇprocess_response,×îºó·µ»Ø¸øÇëÇóÕß¡£

ÉÏÊö½ØÍ¼ÖеÄÖмä¼þ¶¼ÊÇdjangoÖеģ¬ÎÒÃÇÒ²¿ÉÒÔ×Ô¼º¶¨ÒåÒ»¸öÖмä¼þ£¬ÎÒÃÇ¿ÉÒÔ×Ô¼ºÐ´Ò»¸öÀ࣬µ«ÊDZØÐë¼Ì³ÐMiddlewareMixin

ÐèÒªµ¼Èë

from django.utils.deprecation
import MiddlewareMixin

in views:

def index(request):
print("viewº¯Êý...")
return HttpResponse("OK")

in Mymiddlewares.py£º

from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse

class Md1(MiddlewareMixin):

def process_request(self,request):
print("Md1ÇëÇó")

def process_response(self,request,response):
print("Md1·µ»Ø")
return response

class Md2(MiddlewareMixin):

def process_request(self,request):
print("Md2ÇëÇó")
#return HttpResponse("Md2ÖжÏ")
def process_response(self,request,response):
print("Md2·µ»Ø")
return response

Êä³ö£º

Md1ÇëÇó
Md2ÇëÇó
viewº¯Êý...
Md2·µ»Ø
Md1·µ»Ø

×¢Ò⣺Èç¹ûµ±ÇëÇóµ½´ïÇëÇó2µÄʱºòÖ±½Ó²»·ûºÏÌõ¼þ·µ»Ø£¬¼´return HttpResponse("Md2ÖжÏ")£¬³ÌÐò½«°ÑÇëÇóÖ±½Ó·¢¸øÖмä¼þ2·µ»Ø£¬È»ºóÒÀ´Î·µ»Øµ½ÇëÇóÕߣ¬½á¹ûÈçÏ£º

·µ»ØMd2ÖжϵÄÒ³Ãæ£¬ºǫ́´òÓ¡ÈçÏ£º

Md1ÇëÇó
Md2ÇëÇó
Md2·µ»Ø
Md1·µ»Ø

2¡¢process_view

process_view£¨self, request, callback, callback_args, callback_kwargs£©·½·¨½éÉÜ

(1)Ö´ÐÐÍêËùÓÐÖмä¼þµÄrequest·½·¨

(2)urlÆ¥Åä³É¹¦

(3)Äõ½ ÊÓͼº¯ÊýµÄÃû³Æ¡¢²ÎÊý£¬£¨×¢Òâ²»Ö´ÐУ© ÔÙÖ´ÐÐprocess_view()·½·¨

(4)×îºóÈ¥Ö´ÐÐÊÓͼº¯Êý

·½·¨Ò»¡¢

from django.utils.deprecation import
MiddlewareMixin
from django.shortcuts import HttpResponse
class Md1(MiddlewareMixin):
def process_request(self,request):
print("Md1ÇëÇó")
#return HttpResponse("Md1ÖжÏ")
def process_response(self,request,response):
print("Md1·µ»Ø")
return response
def process_view(self, request, callback,
callback_args, callback_kwargs):
print("Md1view")
class Md2(MiddlewareMixin):
def process_request(self,request):
print("Md2ÇëÇó")
return HttpResponse("Md2ÖжÏ")
def process_response(self,request,response):
print("Md2·µ»Ø")
return response
def process_view(self, request, callback,
callback_args, callback_kwargs):
print("Md2view")

Êä³ö£º

Md1ÇëÇó
Md2ÇëÇó
Md1view
Md2view
viewº¯Êý...
Md2·µ»Ø
Md1·µ»Ø

¹ý³Ì·ÖÎö

µ±×îºóÒ»¸öÖмäµÄprocess_requestµ½´ï·ÓɹØÏµÓ³ÉäÖ®ºó£¬·µ»Øµ½Öмä¼þ1µÄprocess_view£¬È»ºóÒÀ´ÎÍùÏ£¬µ½´ïviewsº¯Êý£¬×îºóͨ¹ýprocess_responseÒÀ´Î·µ»Øµ½´ïÓû§¡£

process_view¿ÉÒÔÓÃÀ´µ÷ÓÃÊÓͼº¯Êý£º

class Md1(MiddlewareMixin):
def process_request(self,request):
print("Md1ÇëÇó")
#return HttpResponse("Md1ÖжÏ")
def process_response(self,request,response):
print("Md1·µ»Ø")
return response
def process_view(self, request, callback,
callback_args, callback_kwargs):
# return HttpResponse("hello")
response=callback(request,
*callback_args,**callback_kwargs)
return response

Êä³ö:

Md1ÇëÇó
Md2ÇëÇó
viewº¯Êý...
Md2·µ»Ø
Md1·µ»Ø

×¢Ò⣺process_viewÈç¹ûÓзµ»ØÖµ£¬»áÔ½¹ýÆäËûµÄprocess_viewÒÔ¼°ÊÓͼº¯Êý£¬µ«ÊÇËùÓеÄprocess_response¶¼»¹»áÖ´ÐС£

3¡¢process_exception

process_exception(self, request, exception)·½·¨

M1.request
M2.request
M1.process_view
M2.process_view
Ö´ÐÐindex
M2µÄprocess_exception
M1µÄprocess_exception
Internal Server Error: /index/
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local
\Programs\Python\Python36\lib\site-packages
\django\core\handlers\exception.py",
line 41, in inner
response = get_response(request)
File "C:\Users\Administrator\AppData
\Local\Programs\Python\Python36\lib
\site-packages\django\core\handlers
\base.py", line 187, in _get_response
response = self.process_exception_
by_middleware(e, request)
File "C:\Users\Administrator\AppData\Local
\Programs\Python\Python36\lib\site-packages
\django\core\handlers\base.py",
line 185, in _get_response
response = wrapped_callback(request,
*callback_args, **callback_kwargs)
File "F:\untitled1\app01\views.py",
line 7, in index
int("ok")
ValueError: invalid literal for int()
with base 10: 'ok'
M2.response
M1.response
[03/Jul/2017 16:43:59] "GET /index
/ HTTP/1.1" 500 62663

1¡¢Ö´ÐÐÍêËùÓÐ request ·½·¨

2¡¢Ö´ÐÐ ËùÓÐ process_view·½·¨

3¡¢Èç¹ûÊÓͼº¯Êý³ö´í£¬Ö´ÐÐprocess_exception£¨×îÖÕresponse£¬process_exceptionµÄreturnÖµ£©

Èç¹ûprocess_exception ·½·¨ÓÐÁË ·µ»ØÖµ ¾Í²»ÔÙÖ´ÐÐ ÆäËûÖмä¼þµÄ process_exception£¬Ö±½ÓÖ´ÐÐresponse·½·¨ÏìÓ¦

4.Ö´ÐÐËùÓÐresponse·½·¨

5.×îºó·µ»Øprocess_exceptionµÄ·µ»ØÖµ

Êä³ö£º

M1.request
M2.request
M1.process_view
M2.process_view
Ö´ÐÐindex
M2µÄprocess_exception
£¨ÓÐÁËreturnÖµ£¬Ö±½ÓÖ´ÐÐresponse£©
M2.response
M1.response

process_exceptionµÄÓ¦ÓÃ

ÔÚÊÓͼº¯ÊýÖ´Ðгö´íʱ£¬·µ»Ø´íÎóÐÅÏ¢¡£ÕâÑùÒ³Ãæ¾Í²»»á ±¨´íÁË£¡

class M1(MiddlewareMixin):
def process_request(self, request):
print('M1.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M1.process_view")
def process_response(self,
request, response):
print('M1.response')
return response
def process_exception(self,
request,exception):
print('M1µÄprocess_exception')
class M2(MiddlewareMixin):
def process_request(self, request):
print('M2.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M2.process_view")
def process_response(self,
request, response):
print('M2.response')
return response
def process_exception(self,
request, exception):
print('M2µÄprocess_exception')
return HttpResponse('³ö´íÁËÐֵܣ¡£¡£¡')

Á÷³ÌͼÈçÏ£º

µ±views³öÏÖ´íÎóʱ£º

4¡¢process_template_response()

from django.utils.deprecation
import MiddlewareMixin
from django.shortcuts import
HttpResponse
class M1(MiddlewareMixin):
def process_request(self, request):
print('M1.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M1.process_view")


def process_response(self,
request, response):
print('M1.response')
return response
def process_exception(self,
request,exception):
print('M1µÄprocess_exception')
class M2(MiddlewareMixin):
def process_request(self, request):
print('M2.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M2.process_view")
def process_response(self,
request, response):
print('M2.response')
return response
def process_exception(self,
request, exception):
print('M2µÄprocess_exception')
def process_template_response
(self,request,response):
print('M2process_template_response')
return response

process_template_response()ĬÈϲ»Ö´ÐÐ

rocess_template_response()ÌØÐÔ

Ö»ÓÐÔÚÊÓͼº¯ÊýµÄ·µ»Ø¶ÔÏóÖÐÓÐrender·½·¨²Å»áÖ´ÐУ¡

²¢°Ñ¶ÔÏóµÄrender·½·¨µÄ·µ»ØÖµ·µ»Ø¸øÓû§£¨×¢Òâ²»·µ»ØÊÓͼº¯ÊýµÄreturnµÄ½á¹ûÁË£¬¶øÊÇ·µ»ØÊÓͼº¯Êý returnÖµ£¨¶ÔÏ󣩵Ärender·½·¨£©

from django.utils.deprecation
import MiddlewareMixin
from django.shortcuts
import HttpResponse
class M1(MiddlewareMixin):
def process_request(self, request):
print('M1.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M1.process_view")
def process_response(self,
request, response):
print('M1.response')
return response
def process_exception(self,
request,exception):
print('M1µÄprocess_exception')
class M2(MiddlewareMixin):
def process_request(self, request):
print('M2.request')
def process_view(self, request,
callback,callback_args,callback_kwargs ):
print("M2.process_view")
def process_response
(self, request, response):
print('M2.response')
return response
def process_exception
(self, request, exception):
print('M2µÄprocess_exception')
def process_template_response
(self,request,response):
#Èç¹ûÊÓͼº¯ÊýÖеķµ»ØÖµ ÖÐÓÐrender·½·¨£¬
²Å»áÖ´ÐÐ process_template_response
print('M2process_template_response')
return response

ÊÓͼº¯Êý

from django.shortcuts import
render,HttpResponse
# Create your views here.
class Foo():
def __init__(self,requ):
self.req=requ
def render(self):
return HttpResponse('OKKKK')
def index(request):
print("Ö´ÐÐindex")
obj=Foo(request)
return obj

Ö´Ðнá¹û

Ó¦Óãº

¼ÈÈ»process_template_respnse,²»·µ»ØÊÓͼº¯ÊýµÄreturnµÄ½á¹û£¬¶øÊÇ·µ»ØÊÓͼº¯Êý returnÖµ£¨¶ÔÏ󣩵Ärender·½·¨;(¶à¼ÓÁËÒ»¸ö»·½Ú)

¾Í¿ÉÒÔÔÚ Õâ¸öÊÓͼº¯Êý·µ»Ø¶ÔÏóµÄ render·½·¨À×ö·µ»ØÖµµÄ¶þ´Î¼Ó¹¤ÁË£¡¶à¼Ó¹¤¼¸¸ö£¬ÊÓͼº¯Êý¾Í¿ÉÒÔËæ±ãʹÓÃÁË£¡

£¨ºÃ±È ÅçÎíÆ÷ÓÐÁ˶à¸öÅçÍ·£¬»»²»Í¬µÄÅçÍ·Åç³ö²»Í¬Ë®£¬·µ»ØÖµ¾Í¿ÉÒÔÒ²×é¼þ»¯ÁË£©

from django.shortcuts import render,
HttpResponse
# Create your views here.
class Dict(): #¶ÔÊÓͼº¯Êý·µ»ØÖµ×ö¶þ´Î·â×° £¡£¡
def __init__(self,requ,msg):
self.req=requ
self.msg=msg
def render(self):
a=self.msg #ÔÚrender·½·¨ÀïÃæ °ÑÊÓͼº¯ÊýµÄ
·µ»ØÖµ ÖÆ×÷³É×Öµä ¡¢ÁбíµÈ¡£¡£¡£
# Èç¹ûÐÂÔöÁËÆäËû Ò»¸öÊÓͼº¯ÊýÖ±½Ó£¬
return¶ÔÏó ¼´¿É£¡²»ÓÃÿ¸öÊÓͼº¯Êý¶¼Ð´
ÖÆ×÷×Öµä ÁÐ±í Æ´½ÓµÄÂß¼­ÁË
return HttpResponse(a) #


def index(request):
print("Ö´ÐÐindex")
obj=Dict(request,"vv")
return obj

Öмä¼þÓ¦Óó¡¾°

ÓÉÓÚÖмä¼þ¹¤×÷ÔÚ ÊÓͼº¯ÊýÖ´ÐÐǰ¡¢Ö´Ðкó£¨Ïñ²»ÏñËùÓÐÊÓͼº¯ÊýµÄ×°ÊÎÆ÷£¡£©ÊʺÏËùÓеÄÇëÇó/Ò»²¿·ÖÇëÇó×öÅúÁ¿´¦Àí

1¡¢×öIPÏÞÖÆ

·ÅÔÚ Öмä¼þÀàµÄÁбíÖУ¬×èֹijЩIP·ÃÎÊÁË£»

2¡¢URL·ÃÎʹýÂË

Èç¹ûÓû§·ÃÎʵÄÊÇloginÊÓͼ£¨·Å¹ý£©

Èç¹û·ÃÎÊÆäËûÊÓͼ£¨ÐèÒª¼ì²âÊDz»ÊÇÓÐsessionÒѾ­ÓÐÁË·ÅÐУ¬Ã»Óзµ»Ølogin£©£¬ÕâÑù¾ÍÊ¡µÃÔÚ ¶à¸öÊÓͼº¯ÊýÉÏдװÊÎÆ÷ÁË£¡

3¡¢»º´æ£¨»¹¼ÇµÃCDNÂð?£©

¿Í»§¶ËÇëÇóÀ´ÁË£¬Öмä¼þÈ¥»º´æ¿´¿´ÓÐûÓÐÊý¾Ý£¬ÓÐÖ±½Ó·µ»Ø¸øÓû§£¬Ã»ÓÐÔÙÈ¥Âß¼­²ã Ö´ÐÐÊÓͼº¯Êý

 
   
1485 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ