verejny kontaktnicek #71
2 changed files with 17 additions and 16 deletions
|
@ -2,6 +2,7 @@ from django.shortcuts import get_object_or_404, render
|
|||
from django.http import HttpResponse
|
||||
from django.views import generic
|
||||
from django.contrib.staticfiles.finders import find
|
||||
from django.http import Http404
|
||||
|
||||
import csv
|
||||
import tempfile
|
||||
|
@ -118,12 +119,12 @@ def soustredeniKontaktnicekView(request, soustredeni, typ):
|
|||
soustredeni = get_object_or_404(Soustredeni, id=soustredeni)
|
||||
|
||||
if (not request.user in [u.osoba.user for u in soustredeni.ucastnici.all()]):
|
||||
if not request.user.je_org:
|
||||
return HttpResponse("Nebyl jsi tam nebo nejsi org")
|
||||
if not soustredeni.kontaktnicek_pdf and typ == "pdf":
|
||||
return HttpResponse("Kontaktníček není k dispozici")
|
||||
elif not soustredeni.kontaktnicek_vcf and typ == "vcf":
|
||||
return HttpResponse("Kontaktníček není k dispozici")
|
||||
if not request.user.je_org: # nebyl jsi tam, nebo nejsi org
|
||||
ledoian
commented
Uh, je to ekvivalentní s Uh, je to ekvivalentní s `if request.user not in […] and not request.user.is_org:`?
|
||||
raise Http404()
|
||||
if not soustredeni.kontaktnicek_pdf and typ == "pdf": # není k dispozici
|
||||
raise Http404()
|
||||
ledoian
commented
404 není správný návratový kód (kontaktníček zjevně existuje, ale nemám k němu přístup), má být 403 ( 404 není správný návratový kód (kontaktníček zjevně existuje, ale nemám k němu přístup), má být 403 (`PermissionDenied` se myslím jmenuje ta Djangová výjimka).
|
||||
elif not soustredeni.kontaktnicek_vcf and typ == "vcf": # není k dispozici
|
||||
ledoian
commented
Poněkud se mi nelíbí místní duplikace kódu, když se tam mění dohromady tři věci (až přidáme další, tak někde něco zapomeneme přepsat a bude to bug…). Co třeba:
Poněkud se mi nelíbí místní duplikace kódu, když se tam mění dohromady tři věci (až přidáme další, tak někde něco zapomeneme přepsat a bude to bug…). Co třeba:
```python3
# typ -> (field, mime_type, otevreni)
kontaktnicky = {
| 'pdf': (soustredeni.kontaktnicek_pdf, 'applcation/pdf', 'rb'),
| 'vcf': (soustredeni.kontaktnicek_vcf, 'text/vcard', 'r'), # vcf je texťák, nevím, jestli je potřeba ho otevítat binárně.
}
try:
field, mime, otevreni = kontaktnicky[typ]
except KeyError as e:
raise ValueError("Neznámý typ kontaktníčku") from e
if not field:
| ...
with open(field.path, otevreni) as soubor:
| return HttpResponse(soubor.read(), content_type=mime)
```
ledoian
commented
Uh, ten Uh, ten `if not field: ...` byl náznak toho, že není potřeba výčet typů v `if (not soustredeni.kontaktnicek_pdf and typ == "pdf") or (not soustredeni.kontaktnicek_vcf and typ == "vcf"):`, sorry za neexplicitnost.
|
||||
raise Http404()
|
||||
|
||||
if typ == "pdf":
|
||||
with open(soustredeni.kontaktnicek_pdf.path, 'rb') as pdf:
|
||||
|
@ -134,4 +135,4 @@ def soustredeniKontaktnicekView(request, soustredeni, typ):
|
|||
response = HttpResponse(vcf.read(), content_type='text/vcard')
|
||||
return response
|
||||
else:
|
||||
return HttpResponse("Neplatný typ kontaktníčku")
|
||||
raise ValueError("Nepodporovaný typ kontaktníčku")
|
||||
|
|
Loading…
Reference in a new issue
Asi bych napsal popisnější hlášku, vynechal bych tu část z orgem, a naopak bych tam připsal, že nejsi přihlášený (to se stane asi častěji než že bych se dostal na špatný kontaktníček).
Také si nejsem jistý, jestli HttpResponse je to správné. (Jakože vrátí to něco, co moc nevypadá jako M&M stránky, ne?)