Django জ্যাঙ্গো
  • Python Basic
  • Python OOP
  • OOP Project
  • Jupyter Notebook
  • Python MOngodb
  • Numpy
  • Pandas
  • Framework কি?
  • জ্যাঙ্গো ওয়েব ফ্রেমওয়ার্ক
  • ভার্চুয়াল এনভায়র্নমেন্ট
    • ভার্চুয়াল এনভায়র্নমেন্ট তৈরী করি :
    • জ্যাংগো ইন্সটল
  • প্রথম প্রজেক্ট শুরু
    • সেটিংস পরিচিতি
    • Template
      • load css,js
        • template load
    • create project
  • অ্যাপস কি?
    • প্রথম অ্যাপস তৈরি
  • apps কে প্রজেক্টের সাথে যুক্ত করি
  • এইচটিএমএল টেমপ্লেট নিয়ে কাজ করি
    • স্ট্যাটিক ফাইল ও টেম্পলেট
    • Hompage পরিবর্তন করি
    • বেস টেমপ্লেট বানাই
    • html টেম্পলেট কে কনভার্ট করি
    • Template Tags
    • Context Processor
  • Urls
  • urls.py এ প্যারামিটার কিভাবে কাজ করে
  • message
  • Forms
    • সাধারণ একটি ফর্ম বানাই
    • ফর্ম লে আউট পরিবর্তন
    • বুটস্ট্রাপ ফর্ম
    • মডেল ফর্ম
      • Form Customization
  • models
    • মডেল বানাই
    • মাইগ্রেশন
    • মডেল ভ্যালিডেশন করা
    • মডেল কাস্টমাইজ
  • Crud
    • image Crud Admin Panel
    • Custom Crud
      • form design bootstrap
      • search Functionality
      • menu
    • File Upload App
    • Image Crud
    • Class view Crud
  • Django Authentication
    • Login/Logout(Default)
    • Registration Page(Default )
    • Profile UpdateView (Default)
    • Change Password (Default)
    • Custom Login And Registration
    • Protecting View
  • Custom Field User Model
  • Formset
    • Page 1
    • formset Crud
  • Send Email
    • Send Email From Gmail
      • Send Email With Attachment
    • Email Verification
  • Uploading Images to Cloudinary
  • Database Connection
    • MySQL
    • postgresql
  • Django Orm
    • Basic Database Operation
      • -all()
      • - get():
      • - first() and last():
      • - filter():
      • - exclude():
      • Chaining Queries
      • Creating, Updating, and Deleting Records
      • Aggregation
      • Annotation
    • Model Relationships and Related Names
      • One-to-One Relationships
      • Many-to-One Relationships
      • Many-to-Many Relationships
      • Reverse Relationships
      • Understanding related_name
    • Advanced Querying with Django ORM
      • Chaining Queries
      • F() Expressions
      • Q() Objects
        • Dynamic Search
      • Raw SQL Queries
    • Performance Optimization with Django ORM
      • Select Related
    • Django সিগন্যাল :
  • requirement.txt
  • channels
    • Create Project
    • কনফিগার
  • Send SMS in Django
    • Configuration
  • Mysql Setup
  • অ্যাডমিন প্যানেলে
    • Site Heading And Title Change
    • মডেলকে অ্যাডমিন প্যানেলে যোগ করি
    • মডেলকে একবার সেভ করা যাবে
    • এডমিন প্যানেলে পিডিএফ এক্সপোর্ট বাটন যোগ করি
    • মডেল ফর্ম কাস্টোমাইজ করি
    • মডেলের html টেম্পলেট পরিবর্তন করি
    • ফিল্ড এর ডিজাইন বুটস্ট্রাপ ফরম্যাটে হবে
    • টেবিল বেসড ফর্মসেট এপ্লিকেশন
    • নির্দিষ্ট ইউজারকে মডেলে এক্সেস পারমিশন দেয়া
    • অ্যাডমিন প্যানেলে জাভাস্ক্রিপ্ট ও css ফাইল যোগ করা
    • fetch data
    • bill of materials
  • Django Rest Framework
    • ভার্চুয়াল এনভায়র্নমেন্ট
    • প্রজেক্ট তৈরী করি
    • মডেলকে প্রস্তুত করি
    • serializer
    • Validation
    • Api তৈরী করি (api_view)
    • Api তৈরী করি (viewsets)
    • JsonResponse তৈরি করি
    • authentication
    • Reactjs
  • প্যাকেজ নিয়ে কাজ করি
    • Tinymce Editor
    • highlight.js
    • Social Login
      • Facebook
      • Github
      • google
    • Select2
      • admin panel
    • CELERY
    • Autocomplete Show Multiple Fields
      • Autocomplete Search
  • Mongodb
    • basic models,forms,views
    • Category Crud
      • Category List
      • Create Category
      • Edit Category
      • Delete Category
      • Link Button list.html
    • Tags Crud
      • Tags List
      • Create Tags
      • Edit Tags
      • Delete Tags
      • Link Button list.html
    • Post
      • Post List
      • Create Post
        • Tinymc
      • Post Details
      • Edit Post
      • Delete Post
      • Link Button list.html
      • Search
    • Comment
      • Post Details
    • Formset Crud
      • Models.py
      • forms.py
      • views
      • urls.py
      • Author
        • author_list
        • create_author
        • Edit Author
        • Delete Author
        • Link Button
      • BookFormset
    • Rest Api
    • Image Upload
  • Redis
  • chart
  • Deployment
    • Pythonanywhere
    • Cpanel Host
  • Reactjs
Powered by GitBook
On this page
  1. Mongodb

Image Upload

django দিয়ে আমরা যেভাবে খুব সহজে ইমেজ আপলোড করতে পারি mongodb যখন django এর সাথে কাজ করবে তখন একটু ঘুরিয়ে কাজ করতে হবে তবে কঠিন কিছু না।

মনেকরি আমাদের Post নামে একটি মডেল আছে যার ডেটা আমরা mongodb তে store করি।

আমরা এই মডেল এ শুধু ইমেজ এর নাম সংরক্ষণ করে mongodb তে রাখবো (photoname )

class Post(Document) :
    title=StringField(max_length=200,blank=False)      
    content = StringField(blank=False)
    categories = ReferenceField(Category,default=Category.objects.first())
    tags= ListField(ReferenceField(Tags))    
    author = StringField(blank=True)
    created= DateField(default=datetime.today())
    photoname = StringField(max_length=255, blank=True)  # Store the photo filename

আমরা আমাদের forms.py তে এক্সট্রা একটি ফিল্ড নেব ইমেজ আপলোড করার জন্য যেই ফিল্ড তা আমাদের মডেল এ নেই।

from .models import Post            
class PostForm(DocumentForm)   :
    content = StringField()
    photo = forms.ImageField()  # Add the photo field

    class Meta:
        model=  Post
        exclude=['author','photoname','created']      

photo = forms.ImageField() এই ফিল্ডটা আমাদের মডেল এ নেই আমরা ফর্মের মাদ্ধমে ইমেজ আপলোড করে ইমেজের নামটি ফর্ম সাবমিট করার সময় আমাদের মডেলের photoname ফিল্ডে সেট করলে ইমেজের নামটি mongodb ডেটাবেজ এ সেভ হবে।

import os
from django.conf import settings
@login_required
def create_post(request) :
    if request.method=='POST':
        form   = PostForm(request.POST, request.FILES)
        if form.is_valid():
            # Create a new Post instance and set the author to the current user
            post = form.save(commit=False)
            post.author = request.user.username  # Set the author to the currently logged-in user        
            
            # Save the image file
            photo_file = form.cleaned_data['photo']
            with open(os.path.join(settings.MEDIA_ROOT, photo_file.name), 'wb') as f:
                for chunk in photo_file.chunks():
                    f.write(chunk)  
                    
            post.photoname ='assets/media/'+ photo_file.name                 
            post.save()
            return redirect('home')
    else:
        form = PostForm()
        return render(request,'post/form.html',{'form':form}) 

উপরের কোড অনুযায়ী ডেটাবেজ এ photoname ফিল্ডটি 'assets/media/' এর সাথে আপলোড করা ইমেজের নাম যোগ হয়ে সেভ হবে। যেমন ইমেজ এর নাম যদি হয় python.png তাহলে সেভ হবে assets/media/ python.png

ইমেজটি settings.MEDIA_ROOT অনুযায়ী আপলোড হবে যেহেতু ইমেজ এর লিংক assets/media/ python.png এভাবে সেভ করেছি তাই মিডিয়া সেটিং ও ঐভাবে করতে হবে।

import os
STATIC_URL = 'mblogstatic/'
STATICFILES_DIRS = [
    BASE_DIR / 'mblogstatic',
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mblogstatic/assets/media')

আমাদের static ফোল্ডারের মধ্যে সেট করলাম

এবার html টেম্পলেট এ নিচের মত করে শো করবো।

{% for post in posts%}
  <img loading="lazy" src="{% static post.photoname %}" class="img-fluid" alt="{{ post.photoname }}">
  {% endfor %} 
PreviousRest ApiNextRedis

Last updated 1 year ago