django - Submit to form without relying on URL -
okay appears i'm in way on head on small task. i'd ask how 1 submit form, without relying on url values?
in example, user has log in before can see gallery pictures. determining via "context", has active user (as logged in) assigned it. props @chem1st & @daniel-roseman assistance earlier in helping me figure out yesterday. can display own user gallery in homepage after log in.
i prefer not uploading "blahblah.com/bobby/upload", because doesn't seem secure. i'd let logged in users upload via "blahblah.com/upload/". means form in view.py have context of user who's logged in, somehow, , save data database under account.
i've been toying around, , searching answers, can't find anything. can point me in right direction?
here's models.py
class userprofile(models.model): user = models.onetoonefield(user) activation_key = models.charfield(max_length=40, blank=true) key_expires = models.datetimefield(default=datetime.date.today()) def __str__(self): return self.user.username class meta: verbose_name_plural='user profiles' class imagedoc(models.model): user = models.foreignkey(userprofile) imgfile = models.imagefield(upload_to='images/')
forms.py:
class registrationform(usercreationform): email = forms.emailfield(required=true, widget=forms.textinput(attrs={'placeholder': 'e-mail address'})) first_name = forms.charfield(required=true) last_name = forms.charfield(required=true) class meta: model = user fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2') class imgdocform(forms.form): user_file = forms.imagefield() def clean_user_file(self, *args, **kwargs): cleaned_data = super(imgdocform,self).clean() user_file = cleaned_data.get("user_file") if user_file: if user_file.size > 5 * 1024 * 1024: raise forms.validationerror("filesize big.") if not os.path.splitext(user_file.name)[1].strip().lower() in ['.jpg','.png','.gif','.jpeg']: raise forms.validationerror("file not picture.") return user_file class userform(forms.form): class meta: model = user fields = ['first_name', 'last_name', 'password', 'email', 'username']
my views.py file (edit: changed index display user details, gallery, , quick upload function):
def sign_in(request): context = requestcontext(request) if request.method == 'post': username = request.post['username'] password = request.post['password'] user = authenticate(username=username, password=password) if user: if user.is_active: login(request, user) return httpresponseredirect('/', context) else: return httpresponse("verify account!") else: return httpresponse("invalid login details supplied.") def populatecontext(request, context): context['authenticated'] = request.user.is_authenticated() if context['authenticated'] == true: context['username'] = request.user.username def index(request): user_details = userprofile.objects.get(user=request.user) gallery = imagedoc.objects.filter(user_id=request.user.id) if request.method == 'post': form = imgdocform(request.post, request.files) if form.is_valid(): origin_form = form.cleaned_data["user_file"] origin_name = origin_form.name original_name = imagedoc(user_id=request.user.id, imgfile=origin_name) original_name.save() return httpresponse('saved!') else: form = imgdocform() documents = imagedoc.objects.all() return render(request, 'test.html', {'documents': documents, 'form': form, 'user_details': user_details, 'gallery': gallery}) def upload(request): data = {} thumb_size = (100,100) micro_thumb_size = (50,50) if request.method == 'post': userform = imgdocform(request.post, request.files) if userform.is_valid(): origin_form = userform.cleaned_data["user_file"] origin_name = origin_form.name original_file = os.path.join(settings.media_root, origin_name) . . . original_name = imagedoc(imgfile=origin_name) original_name.save() . . . userform = imgdocform() else: return httpresponse('nooo!') else: userform = imgdocform() data.update(image_gallery = imagedoc.objects.only('imgfile')) data.update(userform=userform) data.update(csrf(request)) return render(request, 'upload.html', data)
edit: i'm sure folks can clean index file significantly. also, not elegant @ bottom there, works.
and upload.html document:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> </head> <body> <div> <form method="post" action="" enctype="multipart/form-data"> {% csrf_token %} {{ userform.as_p }} <input type="submit"> </form> <br><br> <h2>{{ origin_name }} (original)</h2> {% if origin_name %} <img src="{{ media_url }}{{ origin_name }}"> {% endif %} <br><br> {% if image_gallery %} {% image in image_gallery %} <img src="/{{ image.thumbfile }}"> {% endfor %} {% endif %} </div> </body> </html>
thank you!
you can logged in user inside view request.user
.
Comments
Post a Comment