2017-06-25 7 views
5

मैंने अपनी Django वेबसाइट पर एक कस्टम व्यवस्थापक पृष्ठ बनाया है, जहां केवल प्रशासकों की अनुमति होगी और वे ऑब्जेक्ट्स और उनके गुणों को बदलने में सक्षम होंगे। ऑब्जेक्ट्स की मात्रा बहुत अधिक है (9220 बिल्कुल) और व्यवस्थापक पृष्ठ पर उस मॉडल में ऑब्जेक्ट्स के रूप में इनपुट फ़ील्ड की बराबर मात्रा होती है।"जीईटी/POST पैरामीटर की संख्या पार हो गई" त्रुटि से कैसे बचें?

इस कोड है:

<form action="{% url 'Home:AdminPrices' %}" id="mainForm" method="post"> 
{% csrf_token %} 
{% for item in prices %} 
    <ul class="row" style="width: 100%;padding: 0;background-color: white;height: 100px;display: flex;justify-content: left;white-space: nowrap;margin-bottom: 0;margin-top: 0;"> 
     <div style="width: 33.333333333333336%;background-color: white;display: block;color: black;font-size: 0.8em;white-space: nowrap;text-align: center;font-family: 'Lato';padding-top: 25px;">{{ item.hashname }}</div> 
     <div style="width: 33.333333333333336%;background-color: white;display: block;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';padding-top: 25px;">{{ item.sug }}</div> 
     <div style="width: 33.333333333333336%;background-color: white;display: block;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';"><input type="number" value="{{ item.actual }}" name="prices_{{ item.actual }}" style="width: 100%;height: 100%;padding-bottom: 25px;background-color: white;border: 0;color: black;font-size: 1.2em;text-align: center;font-family: 'Lato';"></input></div> 
    </ul> 
{% endfor %} 
    <input type="submit" id="mainSubmit" style="display: none;" name="submitPrices"></input> 
</form> 
<div onclick="document.getElementById('mainForm').submit();" style="background-color: black;border-radius: 5px;position: fixed;display: block;height: 50px;width: 200px;bottom: 0;left:0;right:0;margin: 0 auto;color: white;font-size: 1.5em;text-align: center;padding-top: 12.5px;cursor: pointer;">Submit</div> 

एक बार सबमिट बटन दबाया जाता है, वेबसाइट क्रैश हो जाता है और इस त्रुटि बाहर संकेत देता है:

2017-06-25 10:05:53,158: The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS. 2017-06-25 10:05:53,860: Error running WSGI application 2017-06-25 10:05:53,934: TooManyFieldsSent: The number of GET/POST parameters exceeded settings.DATA_UPLOAD_MAX_NUMBER_FIELDS. 2017-06-25 10:05:53,934:
File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in call 2017-06-25 10:05:53,935: response = self.get_response(request) 2017-06-25 10:05:53,935: 2017-06-25 10:05:53,935: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 124, in get_response 2017-06-25 10:05:53,935: response = self._middleware_chain(request) 2017-06-25 10:05:53,936: 2017-06-25 10:05:53,936: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner 2017-06-25 10:05:53,936: response = response_for_exception(request, exc) 2017-06-25 10:05:53,936: 2017-06-25 10:05:53,936: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 76, in response_for_exception 2017-06-25 10:05:53,937:
response = debug.technical_500_response(request, *sys.exc_info(), status_code=400) 2017-06-25 10:05:53,937: 2017-06-25 10:05:53,937:
File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py", line 84, in technical_500_response 2017-06-25 10:05:53,937: html = reporter.get_traceback_html() 2017-06-25 10:05:53,937: 2017-06-25 10:05:53,937: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py", line 316, in get_traceback_html 2017-06-25 10:05:53,938: c = Context(self.get_traceback_data(), use_l10n=False) 2017-06-25 10:05:53,938: 2017-06-25 10:05:53,938: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py", line 293, in get_traceback_data 2017-06-25 10:05:53,938:
'filtered_POST': self.filter.get_post_parameters(self.request), 2017-06-25 10:05:53,938: 2017-06-25 10:05:53,938: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/views/debug.py", line 167, in get_post_parameters 2017-06-25 10:05:53,938: return request.POST 2017-06-25 10:05:53,938: 2017-06-25 10:05:53,939: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 128, in _get_post 2017-06-25 10:05:53,939:
self._load_post_and_files() 2017-06-25 10:05:53,939: 2017-06-25 10:05:53,939: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/http/request.py", line 311, in _load_post_and_files 2017-06-25 10:05:53,939:
self._post, self._files = QueryDict(self.body, encoding=self._encoding), MultiValueDict() 2017-06-25 10:05:53,939: 2017-06-25 10:05:53,940: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/http/request.py", line 397, in init 2017-06-25 10:05:53,940: for key, value in limited_parse_qsl(query_string, **parse_qsl_kwargs): 2017-06-25 10:05:53,940: 2017-06-25 10:05:53,940: File "/home/MTonskins/Tonskins/Selement/senv/local/lib/python2.7/site-packages/django/utils/http.py", line 350, in limited_parse_qsl 2017-06-25 10:05:53,940: 'The number of GET/POST parameters exceeded

मैं काफी यकीन है कि कैसे मैं इसे से बच सकते हैं नहीं कर रहा हूँ, जा सका मैं सेटिंग्स को बदलता हूं और विशेष रूप से इस दृश्य के लिए अलग-अलग सीमा निर्धारित करता हूं? या क्या मैं इन सभी क्षेत्रों को एक सूची के रूप में जमा कर सकता हूं? यदि नहीं, तो समाधान क्या हो सकता है? क्या मैं कुछ दृश्य देखने के लिए DATA_UPLOAD_MAX_NUMBER_FIELDS सेटिंग निर्दिष्ट कर सकता हूं? अग्रिम में धन्यवाद।

+0

कीमतों में कितने आइटम हैं ?? क्या आप पूर्ण ट्रेसबैक भी पोस्ट कर सकते हैं? – zaidfazil

+0

@FazilZaid मॉडल कीमतों में बिल्कुल 9220 ऑब्जेक्ट्स हैं। मैं अभी पूर्ण ट्रेसबैक के साथ उत्तर अपडेट कर दूंगा। – ShellRox

+1

@FazilZaid कोड अपडेट किया गया, मुझे पता है कि 'DATA_UPLOAD_MAX_NUMBER_FIELDS' विकल्प समस्या का समाधान कर सकता है, लेकिन क्या मैं केवल विशिष्ट दृश्य के विकल्प को निर्दिष्ट कर सकता हूं? – ShellRox

उत्तर

5

Django के प्रलेखन कहा गया है कि सेटिंग सेटिंग की तुलना में कहीं अन्य नहीं बदला जाना चाहिए:

https://docs.djangoproject.com/en/1.11/topics/settings/#altering-settings-at-runtime

समाधान, जैसा कि आप उल्लेख किया है, यह DATA_UPLOAD_MAX_NUMBER_FIELDS के आकार सेटिंग में वृद्धि कर रहा है। सौभाग्य!

+0

हैलो, उत्तर के लिए धन्यवाद। बस एक और सवाल, क्या यह सर्वर ओवरलोडिंग जोखिम को बढ़ाएगा जब हमलावरों द्वारा बहुत से पोस्ट/जीईटी अनुरोध भेजे जाएंगे? चूंकि मेरी अधिकांश वेबसाइट के विचार POST अनुरोध ले रहे हैं, और विशेष रूप से इस दृश्य को केवल प्रशासकों द्वारा ही एक्सेस किया जा सकता है। – ShellRox

+1

संभावित रूप से, लेकिन सीएसआरएफ जैसे सुरक्षा के अन्य स्तर हैं। मैं व्यक्तिगत क्षेत्रों की संख्या के बारे में ज्यादा चिंता नहीं करता हूं! – FlipperPA

संबंधित मुद्दे