2017-06-25 20 views
5

Django web sitemde özel bir yönetici sayfası oluşturdum. Yalnızca yöneticilere izin verilecek ve nesneleri ve niteliklerini değiştirebilecek. Nesnelerin miktarı çok (9220 tam olarak) ve yönetici sayfasında bu modeldeki nesneler olarak eşit miktarda girdi alanı vardır. Olabilir,"GET/POST parametrelerinin sayısı aşıldı" hatası nasıl önlenir?

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

Ben bunu önlemek nasıl emin değilim:

Bu

kodudur:

<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> 

kez Gönder düğmesine basıldığında, Web çöker ve bu hatayı dışarı ister Bu görünüm için ayarları değiştirip farklı bir sınır mı koyarım? Ya da tüm bu alanları tek bir liste olarak gönderebilir miyim? Eğer değilse, o zaman çözüm ne olabilir? Belirli bir görünüme DATA_UPLOAD_MAX_NUMBER_FIELDS ayarını belirleyebilir miyim? Şimdiden teşekkürler.

+0

Fiyatlar kaç adettir? Tam izini de gönderebilir misin? – zaidfazil

+0

@FazilZaid Modelde tam 9220 nesne bulunmaktadır. Yanıtı şimdi tam geri izleme ile güncelleyeceğim. – ShellRox

+1

@FazilZaid Kod güncellendi, biliyorum 'DATA_UPLOAD_MAX_NUMBER_FIELDS' seçeneği sorunu çözebilir, Ama ben sadece belirli bir görünüm seçeneğini belirleyebilir miyim? – ShellRox

cevap

5

Django'nın dokümantasyon ayarları ayarlarından dışında başka yerde değiştirilmemesi gerektiğini belirtmektedir: Bahsettiğiniz olarak

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

çözüm, bu ayarlarda DATA_UPLOAD_MAX_NUMBER_FIELDS boyutunu artırmak olduğunu. İyi şanslar!

+0

Merhaba, Cevabınız için teşekkürler. Başka bir soru, saldırganlar tarafından bir çok POST/GET isteği gönderileceği zaman sunucu aşırı riskini arttırmaz mı? Web sitemin görünümlerinin çoğunun POST istekleri alması nedeniyle Ve özellikle bu görünüm yalnızca yöneticiler tarafından erişilebilir. – ShellRox

+1

Potansiyel olarak, ancak CSRF gibi başka koruma düzeyleri vardır. Bireysel alanların sayısı hakkında onların içeriği kadar endişelenmezdim! – FlipperPA

İlgili konular