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

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -