আমি জাঙ্গো অ্যাপ্লিকেশনগুলির সাথে অ্যাজাক্সকে কীভাবে সংহত করব?


264

আমি জ্যাঙ্গোতে নতুন এবং আজাক্সে বেশ নতুন। আমি এমন একটি প্রকল্পে কাজ করছি যেখানে আমার দু'জনকে সংহত করার প্রয়োজন। আমি বিশ্বাস করি যে আমি তাদের উভয়ের পেছনের নীতিগুলি বুঝতে পারি, তবে দুজনের একসাথে ভাল ব্যাখ্যা খুঁজে পাইনি।

দু'জনকে একত্রিত করার সাথে কীভাবে কোডবেস পরিবর্তন করতে হবে তার একটি দ্রুত ব্যাখ্যা আমাকে কেউ দিতে পারেন?

উদাহরণস্বরূপ, আমি এখনও HttpResponseঅ্যাজাক্সের সাথে এটি ব্যবহার করতে পারি , বা আমার প্রতিক্রিয়াগুলি আজাক্স ব্যবহারের সাথে পরিবর্তন করতে হবে? যদি তাই হয়, আপনি দয়া করে কীভাবে অনুরোধগুলির প্রতিক্রিয়াগুলি পরিবর্তন করতে হবে তার একটি উদাহরণ সরবরাহ করতে পারেন? যদি এটি কোনও পার্থক্য করে তবে আমি যে তথ্যটি ফিরিয়ে দিচ্ছি তা হ'ল জেএসএন।

উত্তর:


637

যদিও এটি পুরোপুরি এসও স্পিরিটে নয় তবে আমি এই প্রশ্নটি পছন্দ করি কারণ আমি শুরু করার সময় আমার একই সমস্যা হয়েছিল, তাই আমি আপনাকে একটি দ্রুত গাইড দেব। স্পষ্টতই আপনি তাদের পিছনে নীতিগুলি বুঝতে পারেন না (এটাকে অপরাধ হিসাবে গ্রহণ করবেন না, তবে আপনি যদি তা জিজ্ঞাসা করবেন না)।

জ্যাঙ্গো হয় সার্ভার সাইড । এর অর্থ, কোনও ক্লায়েন্টের ইউআরএল গিয়ে বলুন, আপনার ভিতরে একটি ফাংশন রয়েছে viewsযা সে যা দেখায় তা রেন্ডার করে এবং এইচটিএমএলে প্রতিক্রিয়া ফিরিয়ে দেয়। আসুন এটি উদাহরণগুলিতে বিভক্ত করুন:

views.py:

def hello(request):
    return HttpResponse('Hello World!')

def home(request):
    return render_to_response('index.html', {'variable': 'world'})

index.html:

<h1>Hello {{ variable }}, welcome to my awesome site</h1>

urls.py:

url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),

এটি সহজ ব্যবহারের উদাহরণ। ফাংশনটিতে 127.0.0.1:8000/helloএকটি অনুরোধ বোঝানো hello(), যাওয়াতে 127.0.0.1:8000/homeফিরে আসা index.htmlএবং জিজ্ঞাসা করা সমস্ত ভেরিয়েবলগুলি প্রতিস্থাপন করবে (আপনি সম্ভবত এতক্ষণে এগুলি জানেন)।

এবার আসুন এজেএক্স সম্পর্কে । এজেএক্স কলগুলি ক্লায়েন্ট-সাইড কোড যা অ্যাসিঙ্ক্রোনাস অনুরোধ করে। এটি জটিল শোনায় তবে এর সহজ অর্থ এটি পটভূমিতে আপনার জন্য একটি অনুরোধ করে এবং তারপরে প্রতিক্রিয়াটি পরিচালনা করে। সুতরাং আপনি যখন কোনও ইউআরএল-এর জন্য একটি এজেএক্স কল করবেন তখন আপনি সেই একই ডেটা পাবেন যা আপনি সেই জায়গায় যাচ্ছেন একজন ব্যবহারকারী হিসাবে।

উদাহরণস্বরূপ, একটি এজেএক্স কল 127.0.0.1:8000/helloএকই জিনিসটি ফিরিয়ে দেবে যেমনটি আপনি এটি দেখেছেন। কেবলমাত্র এই সময়ে, আপনার এটি একটি জাভাস্ক্রিপ্ট ফাংশনটির অভ্যন্তরে রয়েছে এবং আপনি এটি চান তবে আপনি এটি মোকাবেলা করতে পারেন। আসুন একটি সাধারণ ব্যবহারের কেস দেখুন:

$.ajax({
    url: '127.0.0.1:8000/hello',
    type: 'get', // This is the default though, you don't actually need to always mention it
    success: function(data) {
        alert(data);
    },
    failure: function(data) { 
        alert('Got an error dude');
    }
}); 

সাধারণ প্রক্রিয়াটি হ'ল:

  1. কলটি ইউআরএল এ যায় 127.0.0.1:8000/helloযেন আপনি একটি নতুন ট্যাব খোলেন এবং নিজেই করেছিলেন।
  2. যদি এটি সফল হয় (স্থিতি কোড 200), সাফল্যের জন্য ফাংশনটি করুন, যা প্রাপ্ত ডেটা সতর্ক করবে।
  3. যদি ব্যর্থ হয় তবে একটি আলাদা ফাংশন করুন।

এখন এখানে কি হবে? আপনি এতে 'হ্যালো ওয়ার্ল্ড' দিয়ে একটি সতর্কতা পাবেন। আপনি বাড়িতে AJAX কল করলে কি হবে? একই জিনিস, আপনি একটি সতর্কতার বিবরণী পাবেন <h1>Hello world, welcome to my awesome site</h1>

অন্য কথায় - এজেএক্স কল সম্পর্কে নতুন কিছু নেই। পৃষ্ঠাটি না রেখেই ব্যবহারকারীকে ডেটা এবং তথ্য পেতে দেওয়ার জন্য এগুলি কেবলমাত্র একটি উপায় এবং এটি আপনার ওয়েবসাইটটির একটি মসৃণ এবং খুব ঝরঝরে নকশা তৈরি করে। কয়েকটি গাইডলাইন আপনার লক্ষ্য করা উচিত:

  1. JQuery শিখুন । আমি এটাকে যথেষ্ট চাপ দিতে পারি না। আপনি প্রাপ্ত ডেটা কীভাবে পরিচালনা করবেন তা জানার জন্য আপনাকে এটি কিছুটা বুঝতে হবে। আপনাকে কিছু বেসিক জাভাস্ক্রিপ্ট সিনট্যাক্সও বুঝতে হবে (পাইথন থেকে খুব বেশি দূরে নয়, আপনি এটিতে অভ্যস্ত হয়ে যাবেন)। আমি jQuery এর জন্য এনভাতোর ভিডিও টিউটোরিয়ালগুলি দৃ strongly ়ভাবে প্রস্তাব দিচ্ছি , তারা দুর্দান্ত এবং আপনাকে সঠিক পথে রাখবে।
  2. JSON কখন ব্যবহার করবেন? । আপনি প্রচুর উদাহরণ দেখতে যাচ্ছেন যেখানে জ্যাঙ্গো ভিউ দ্বারা প্রেরিত ডেটা জেএসএনে রয়েছে। আমি সে সম্পর্কে বিশদে যাইনি, কারণ এটি কীভাবে করা যায় তা গুরুত্বপূর্ণ নয় (যখন প্রচুর ব্যাখ্যা প্রচুর পরিমাণে রয়েছে) এবং যখন আরও অনেক গুরুত্বপূর্ণ । এবং এর উত্তরটি হল - জেএসএন ডেটা হ'ল সিরিয়ালযুক্ত ডেটা। এটি হ'ল ডেটা আপনি ম্যানিপুলেট করতে পারেন। আমি যেমন উল্লেখ করেছি, একটি এজেএক্স কল প্রতিক্রিয়া আনবে যেন এটি ব্যবহারকারী নিজেই করেছিলেন। এখন বলুন যে আপনি সমস্ত এইচটিএমএল নিয়ে গণ্ডগোল করতে চান না, এবং এর পরিবর্তে ডেটা প্রেরণ করতে চান (সম্ভবত সামগ্রীর তালিকা)। জেএসএন এটির পক্ষে ভাল, কারণ এটি এটিকে একটি অবজেক্ট হিসাবে প্রেরণ করে (জেএসএন ডেটা দেখতে পাই অজগর অভিধানের মতো) এবং তারপরে আপনি এটির পুনরাবৃত্তি করতে পারেন বা এমন কোনও কিছু করতে পারেন যা অকেজো এইচটিএমএল-এর মাধ্যমে চালনার প্রয়োজনকে সরিয়ে দেয়।
  3. এটি শেষ যোগ করুন । আপনি যখন একটি ওয়েব অ্যাপ্লিকেশন তৈরি করেন এবং এজ্যাক্স বাস্তবায়ন করতে চান - নিজেকে একটি অনুগ্রহ করুন। প্রথমে কোনও এজেএক্স সম্পূর্ণরূপে সম্পূর্ণ অ্যাপ্লিকেশনটি তৈরি করুন। দেখুন যে সমস্ত কিছু কাজ করছে। তারপরে এবং তারপরেই, এজেএক্স কলগুলি লেখা শুরু করুন। এটি একটি ভাল প্রক্রিয়া যা আপনাকে আরও অনেক কিছু শিখতে সহায়তা করে।
  4. ক্রোমের বিকাশকারী সরঞ্জামগুলি ব্যবহার করুন । যেহেতু AJAX কলগুলি পটভূমিতে করা হয় কখনও কখনও সেগুলি ডিবাগ করা খুব কঠিন very আপনার ক্রোম বিকাশকারী সরঞ্জামগুলি (বা অনুরূপ সরঞ্জাম যেমন ফায়ারবগ) এবং console.logডিবাগ করার জন্য জিনিসগুলি ব্যবহার করা উচিত । আমি বিশদভাবে ব্যাখ্যা করব না, কেবল গুগল করব এবং এটি সম্পর্কে সন্ধান করব। এটি আপনার পক্ষে খুব সহায়ক হবে।
  5. সিএসআরএফ সচেতনতা । অবশেষে, মনে রাখবেন যে জ্যাঙ্গো পোস্ট অনুরোধ প্রয়োজন csrf_token। AJAX কলগুলির সাথে, আপনি পৃষ্ঠাটি রিফ্রেশ না করে অনেক সময় ডেটা প্রেরণ করতে চান। অবশেষে এটি মনে রাখার আগে আপনি সম্ভবত কিছু সমস্যার মুখোমুখি হবেন - অপেক্ষা করুন, আপনি এটি প্রেরণ করতে ভুলে গিয়েছিলেন csrf_token। এটি এজেএক্স-জাঙ্গো ইন্টিগ্রেশনের একটি পরিচিত শিক্ষানবিস, তবে কীভাবে এটি সুন্দর করে চালানো যায় তা শিখার পরে পাই হিসাবে এটি সহজ।

এটাই আমার মাথায় আসে। এটি একটি বিস্তৃত বিষয়, তবে হ্যাঁ, সম্ভবত সেখানে যথেষ্ট উদাহরণ নেই। ধীরে ধীরে, আপনার সেখানে কাজ করুন, আপনি শেষ পর্যন্ত এটি পাবেন।


1
ধন্যবাদ। আমি যেখানে ছিলাম কেবল সেখানে ছিলাম, আমি অনুভূতিটি জানি। চ্যাটিং হিসাবে - সাধারণত হ্যাঁ, তবে এখনই নয় (এছাড়াও, নির্দিষ্ট প্রশ্নগুলির জন্য আপনি ... ভাল ... পুরোপুরি এসও)।
ইউভি

2
আমার লিঙ্ক করা ভিডিওগুলি পিএসের পুরো সপ্তাহটি অ্যাজেএক্সকে উত্সর্গ করা হয়েছে। গুরুতরভাবে, তাদের মাধ্যমে যান। তারা দুর্দান্ত
yuvi

এই জন্য @ ইউভি ধন্যবাদ! আমি নিজেকে এজেএক্স সম্পর্কে একই প্রশ্ন করছি। আরও, আমি কখন এজেএক্স ব্যবহার করব বা করব না তা নিশ্চিত নই। উদাহরণস্বরূপ, আমি বুঝতে পেরেছি বুটস্ট্র্যাপ মডেল ফর্মগুলি পরিচালনা করতে আমার কিছু জাভাস্ক্রিপ্টের প্রয়োজন হবে তবে আমি এটি বুঝতে পারি না এটি অ্যাজএক্সের সাথে সম্পর্কিত কিনা না। এবং গুরুত্ব সহকারে, পুরো পৃষ্ঠাটি আমার পাতায় একটি পপ-আপ হাজির করার জন্য শিখতে হয়েছে ... আমি বিনিয়োগের ক্ষেত্রে প্রত্যাবর্তনটি দেখতে পাচ্ছি না :( কি আরও সহজ বিকল্প আছে? :( আপনার উত্তরের জন্য আবারও ধন্যবাদ।
ডেভিড D.

5
@DavidW। হ্যালো ডেভিড, আমি খুশি যে আমার উত্তর আপনাকে সাহায্য করেছে। এজেএক্স একটি কৌশল, যা আপনি সাধারণ জাভাস্ক্রিপ্ট দিয়ে করতে পারেন, তবে খুব জটিল হয়ে উঠতে পারেন। jQuery এর শর্টকাটগুলি কেবল এটি সহজ করে তোলে। বুটস্ট্র্যাপের মডেলের সাথে এর কোনও সম্পর্ক নেই (আপনি চাইলে আপনি এজেএক্সের মাধ্যমে ফর্মগুলি আনতে পারেন তবে এটি অন্যথায় সম্পর্কিত নয়)। যাইহোক, আমি আপনাকে সুপারিশ করছি আপনার চেষ্টা করুন এবং ধীরে ধীরে আপনার পথটি নির্ধারণ করুন। আজকাল jQuery গুরুত্বপূর্ণ এবং খুব বেসিক, তাই সেখানে ভাল বিনিয়োগ। আপনি যখন কোনও রাস্তা অবরোধ করেন, এসওতে এসে জিজ্ঞাসা করুন (ইতিমধ্যে উত্তর দেওয়া প্রশ্নের মন্তব্যে এখানে নয়, একটি নতুন খুলুন)। শুভকামনা!
যুবী

আপনার উল্লেখ সম্পর্কিত csrf_token, আমরা কি এই পদ্ধতিটি নিয়ে কাজ করতে পারি? আমাদের যদি একটি উদাহরণ ফাংশন থাকে তবে ajaxCall()আমরা কেবল likeতিহ্যবাহী পদ্ধতির মতো কিছু ব্যবহার করতে পারি <form onsubmit='ajaxCall();return false;'>, তাই না?
ytpillai

22

ইউবির চমৎকার উত্তর থেকে আরও, আমি জ্যাঙ্গোর মধ্যে কীভাবে এটি মোকাবেলা করতে হবে (কোনও জেএস ব্যবহার করা হবে না তার বাইরে) কীভাবে একটি সামান্য নির্দিষ্ট উদাহরণ যুক্ত করতে চাই। উদাহরণটি AjaxableResponseMixinকোনও লেখক মডেল ব্যবহার করে এবং ধরে নেয়।

import json

from django.http import HttpResponse
from django.views.generic.edit import CreateView
from myapp.models import Author

class AjaxableResponseMixin(object):
    """
    Mixin to add AJAX support to a form.
    Must be used with an object-based FormView (e.g. CreateView)
    """
    def render_to_json_response(self, context, **response_kwargs):
        data = json.dumps(context)
        response_kwargs['content_type'] = 'application/json'
        return HttpResponse(data, **response_kwargs)

    def form_invalid(self, form):
        response = super(AjaxableResponseMixin, self).form_invalid(form)
        if self.request.is_ajax():
            return self.render_to_json_response(form.errors, status=400)
        else:
            return response

    def form_valid(self, form):
        # We make sure to call the parent's form_valid() method because
        # it might do some processing (in the case of CreateView, it will
        # call form.save() for example).
        response = super(AjaxableResponseMixin, self).form_valid(form)
        if self.request.is_ajax():
            data = {
                'pk': self.object.pk,
            }
            return self.render_to_json_response(data)
        else:
            return response

class AuthorCreate(AjaxableResponseMixin, CreateView):
    model = Author
    fields = ['name']

উত্স: জাজানো ডকুমেন্টেশন, শ্রেণিভিত্তিক মতামত সহ ফর্ম হ্যান্ডলিং

জ্যাঙ্গোর 1.6 সংস্করণটির লিঙ্কটি আর 1.11 সংস্করণে আপডেট হওয়া উপলভ্য নয়


14

আমি এটি লিখছি কারণ গৃহীত উত্তরটি বেশ পুরানো, এর জন্য একটি রিফ্রেশার দরকার।

সুতরাং আমি এভাবেই ২০১২ সালে অ্যাজাক্সকে জ্যাঙ্গোর সাথে একীভূত করব :) এবং আমাদের কখন অ্যাজাক্সের প্রয়োজন হবে তার একটি বাস্তব উদাহরণ নিতে পারি: -

বলুন যে আমার কাছে নিবন্ধিত ব্যবহারকারীর নাম সহ একটি মডেল আছে এবং এজাক্সের সহায়তায় আমি জানতে চাই যে প্রদত্ত ব্যবহারকারীর নামটি বিদ্যমান কিনা exists

এইচটিএমএল:

<p id="response_msg"></p> 
<form id="username_exists_form" method='GET'>
      Name: <input type="username" name="username" />
      <button type='submit'> Check </button>           
</form>   

Ajax:

$('#username_exists_form').on('submit',function(e){
    e.preventDefault();
    var username = $(this).find('input').val();
    $.get('/exists/',
          {'username': username},   
          function(response){ $('#response_msg').text(response.msg); }
    );
}); 

urls.py:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('exists/', views.username_exists, name='exists'),
]

views.py:

def username_exists(request):
    data = {'msg':''}   
    if request.method == 'GET':
        username = request.GET.get('username').lower()
        exists = Usernames.objects.filter(name=username).exists()
        if exists:
            data['msg'] = username + ' already exists.'
        else:
            data['msg'] = username + ' does not exists.'
    return JsonResponse(data)

এছাড়াও রেন্ডার_ টু রিসপন্স যা অবনতিহীন এবং রেন্ডার দ্বারা প্রতিস্থাপন করা হয়েছে এবং জ্যাঙ্গো থেকে ১.7 থেকে এইচটিপিআরস্পেন্সের পরিবর্তে আমরা জসনরেসপনস ব্যবহার করি প্রতিক্রিয়া হিসাবে । কারণ এটি একটি জেএসএন এনকোডার নিয়ে আসে, সুতরাং প্রতিক্রিয়া অবজেক্টটি ফেরত দেওয়ার আগে আপনাকে ডেটা সিরিয়ালাইজ করার দরকার নেই তবে হ্রাস HttpResponseকরা হয়নি।


8

সরল এবং সুন্দর। আপনার নিজের মতামত পরিবর্তন করতে হবে না। Bjax আপনার সমস্ত লিঙ্ক পরিচালনা করে। এটি দেখুন: বাজ্যাক্স

ব্যবহার:

<script src="bjax.min.js" type="text/javascript"></script>
<link href="bjax.min.css" rel="stylesheet" type="text/css" />

অবশেষে, আপনার এইচটিএমএল এর হেড মধ্যে এটি অন্তর্ভুক্ত করুন:

$('a').bjax();

আরও সেটিংসের জন্য, চেকআউট ডেমোটি এখানে: বজাক্স ডেমো


18
হাই, দ্রুত দ্রষ্টব্য - আমি যে কাউকে স্রেফ জ্যাঙ্গো এবং \ বা এজেএক্স শিখতে শুরু করলাম তাদের পরামর্শ দিতে চাই - দয়া করে এটি ব্যবহার করবেন না । তুমি কিছুই শিখবে না এটি আপনার প্রিয়তে রাখুন এবং আপনার নিজের এজেএক্স অনুরোধগুলি তৈরি করুন। ফিরে আসুন এবং একবারে আপনি কীভাবে এটি ব্যাকগ্রাউন্ডে কাজ করে তা সম্পর্কে ইতিমধ্যে পরিচিত হয়ে পরে Bjax ব্যবহার করুন। কোড করার জন্য লোকেরা অ্যাসেম্বলি শিখতে বলার মতো নয় - খাঁটি জেএস, খালি jQuery দিয়ে আপনাকে আপনার AJAX অনুরোধগুলি তৈরি করার দরকার নেই, কারণ আপনি যদি কখনও পেশাদার হতে চান তবে এটি ন্যূনতম বেসিক জ্ঞান থাকা দরকার। চিয়ার্স
yuvi

5

অ্যাসিনক্রোনাস কাজ করার সেরা উপায় অ্যাজ্যাক্স। যে কোনও ওয়েবসাইট বিল্ডিংয়ে অ্যাসিঙ্ক্রোনাস কল করা সাধারণ is আমরা জ্যাঙ্গোতে কীভাবে এজেএক্স বাস্তবায়ন করতে পারি তা শিখতে আমরা একটি সংক্ষিপ্ত উদাহরণ নেব। কম জাভাস্ক্রিপ্ট লেখার জন্য আমাদের jQuery ব্যবহার করা উচিত।

এটি পরিচিতির উদাহরণ, যা সবচেয়ে সহজ উদাহরণ, আমি এজেএক্সের বুনিয়াদি এবং জ্যাঙ্গোতে এর বাস্তবায়ন ব্যাখ্যা করতে ব্যবহার করছি। আমরা এই উদাহরণে পোস্ট অনুরোধ করা হবে। আমি এই পোস্টের একটি উদাহরণ অনুসরণ করছি: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django

models.py

আসুন প্রথমে যোগাযোগের মডেল তৈরি করি, প্রাথমিক বিবরণ রাখি।

from django.db import models

class Contact(models.Model):
    name = models.CharField(max_length = 100)
    email = models.EmailField()
    message = models.TextField()
    timestamp = models.DateTimeField(auto_now_add = True)

    def __str__(self):
        return self.name

forms.py

উপরের মডেলটির জন্য ফর্ম তৈরি করুন।

from django import forms
from .models import Contact

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        exclude = ["timestamp", ]

views.py

মতামতগুলি মূল ফাংশন-ভিত্তিক তৈরি দৃশ্যের সাথে অনুরূপ, তবে রেন্ডার দিয়ে ফিরে আসার পরিবর্তে, আমরা জসনরেসপন্স প্রতিক্রিয়া ব্যবহার করছি।

from django.http import JsonResponse
from .forms import ContactForm

def postContact(request):
    if request.method == "POST" and request.is_ajax():
        form = ContactForm(request.POST)
        form.save()
        return JsonResponse({"success":True}, status=200)
    return JsonResponse({"success":False}, status=400)

urls.py

উপরের ভিউটির রুট তৈরি করা যাক।

from django.contrib import admin
from django.urls import path
from app_1 import views as app1

urlpatterns = [
    path('ajax/contact', app1.postContact, name ='contact_submit'),
]

টেমপ্লেট

ফ্রন্টএন্ড বিভাগে সরিয়ে, ফর্মটি রেন্ডার করুন যা সিএসআরএফ_ টোকেন এবং জমা বোতামের সাথে বদ্ধ ফর্ম ট্যাগের উপরে তৈরি করা হয়েছিল। নোট করুন যে আমরা jquery লাইব্রেরি অন্তর্ভুক্ত করেছি।

<form id = "contactForm" method= "POST">{% csrf_token %}
   {{ contactForm.as_p }}
  <input type="submit" name="contact-submit" class="btn btn-primary" />
</form>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

জাভাস্ক্রিপ্ট

আসুন এখন জাভাস্ক্রিপ্ট অংশ সম্পর্কে কথা বলা যাক, ফর্ম জমা উপর আমরা POST টাইপ এর এজাক্স অনুরোধ করছি, ফর্ম তথ্য গ্রহণ এবং সার্ভার দিকে প্রেরণ।

$("#contactForm").submit(function(e){
    // prevent from normal form behaviour
        e.preventDefault();
        // serialize the form data  
        var serializedData = $(this).serialize();
        $.ajax({
            type : 'POST',
            url :  "{% url 'contact_submit' %}",
            data : serializedData,
            success : function(response){
            //reset the form after successful submit
                $("#contactForm")[0].reset(); 
            },
            error : function(response){
                console.log(response)
            }
        });
   });

জাঙ্গো দিয়ে এজেএক্সের সাথে সূচনা করার জন্য এটি কেবলমাত্র একটি প্রাথমিক উদাহরণ, আপনি যদি আরও বেশ কয়েকটি উদাহরণ দিয়ে ডাইভ পেতে চান তবে আপনি এই নিবন্ধটি দিয়ে যেতে পারেন: https://djangopy.org/learn/step-up-guide-to- বাস্তবায়ন-Ajax-ইন-জ্যাঙ্গো


2

আমি AjaxableResponseMixin ব্যবহার করার চেষ্টা করেছি আমার প্রকল্পে করেছি, কিন্তু নিম্নলিখিত ত্রুটি বার্তাটি দিয়ে শেষ করেছি:

যথাযথ কনফিগার্ড: পুনঃনির্দেশ করার জন্য কোনও URL নেই। হয় url সরবরাহ করুন বা মডেলটিতে get_absolve_url পদ্ধতিটি সংজ্ঞায়িত করুন।

কারণ আপনি ব্রাউজারে জেএসএন অনুরোধ প্রেরণ করার সময় ক্রিয়েটিভিউ কোনও এইচটিপিআরস্পোনস ফিরিয়ে দেওয়ার পরিবর্তে পুনর্নির্দেশের প্রতিক্রিয়া ফিরিয়ে দেবে। সুতরাং আমি কিছু পরিবর্তন করেছি AjaxableResponseMixin। অনুরোধটি যদি একটি এজ্যাক্স অনুরোধ হয় তবে এটি super.form_validপদ্ধতিটি কল করবে না , কেবল form.save()সরাসরি কল করুন ।

from django.http import JsonResponse
from django import forms
from django.db import models

class AjaxableResponseMixin(object):
    success_return_code = 1
    error_return_code = 0
    """
    Mixin to add AJAX support to a form.
    Must be used with an object-based FormView (e.g. CreateView)
    """
    def form_invalid(self, form):
        response = super(AjaxableResponseMixin, self).form_invalid(form)
        if self.request.is_ajax():
            form.errors.update({'result': self.error_return_code})
            return JsonResponse(form.errors, status=400)
        else:
            return response

    def form_valid(self, form):
        # We make sure to call the parent's form_valid() method because
        # it might do some processing (in the case of CreateView, it will
        # call form.save() for example).
        if self.request.is_ajax():
            self.object = form.save()
            data = {
                'result': self.success_return_code
            }
            return JsonResponse(data)
        else:
            response = super(AjaxableResponseMixin, self).form_valid(form)
            return response

class Product(models.Model):
    name = models.CharField('product name', max_length=255)

class ProductAddForm(forms.ModelForm):
    '''
    Product add form
    '''
    class Meta:
        model = Product
        exclude = ['id']


class PriceUnitAddView(AjaxableResponseMixin, CreateView):
    '''
    Product add view
    '''
    model = Product
    form_class = ProductAddForm

0

যখন আমরা জ্যাঙ্গো ব্যবহার করি:

Server ===> Client(Browser)   
      Send a page

When you click button and send the form,
----------------------------
Server <=== Client(Browser)  
      Give data back. (data in form will be lost)
Server ===> Client(Browser)  
      Send a page after doing sth with these data
----------------------------

আপনি যদি পুরানো ডেটা রাখতে চান তবে আপনি এটি আজাক্স ছাড়াই করতে পারেন। (পৃষ্ঠা সতেজ করা হবে)

Server ===> Client(Browser)   
      Send a page
Server <=== Client(Browser)  
      Give data back. (data in form will be lost)
Server ===> Client(Browser)  
      1. Send a page after doing sth with data
      2. Insert data into form and make it like before. 
      After these thing, server will send a html page to client. It means that server do more work, however, the way to work is same.

অথবা আপনি অ্যাজাক্স দিয়ে করতে পারেন (পৃষ্ঠাটি রিফ্রেশ হবে না)

--------------------------
<Initialization> 
Server ===> Client(Browser) [from URL1]    
      Give a page                      
--------------------------  
<Communication>
Server <=== Client(Browser)     
      Give data struct back but not to refresh the page.
Server ===> Client(Browser) [from URL2] 
      Give a data struct(such as JSON)
---------------------------------

আপনি যদি অ্যাজাক্স ব্যবহার করেন তবে আপনাকে অবশ্যই এটি করতে হবে:

  1. ইউআরএল 1 ব্যবহার করে একটি HTML পৃষ্ঠা সূচনা করুন (আমরা সাধারণত জ্যাঙ্গো টেমপ্লেট দ্বারা প্রাথমিক পৃষ্ঠা)। এবং তারপরে সার্ভার ক্লায়েন্টকে একটি html পৃষ্ঠা প্রেরণ করে।
  2. ইউআরএল 2 ব্যবহার করে সার্ভারের সাথে যোগাযোগ করতে অ্যাজাক্স ব্যবহার করুন। এবং তারপরে সার্ভার ক্লায়েন্টকে একটি ডেটা স্ট্রাক প্রেরণ করে।

জাজানো অ্যাজাক্স থেকে আলাদা। এর কারণ নিম্নরূপ:

  • ক্লায়েন্টের কাছে ফিরে আসা জিনিসটি আলাদা। জ্যাঙ্গোর কেসটি এইচটিএমএল পৃষ্ঠা। অ্যাজাক্সের ক্ষেত্রে ডেটা স্ট্রাক্ট। 
  • জাজানো কিছু তৈরিতে ভাল, তবে এটি কেবল একবার তৈরি করতে পারে, এটি কোনও কিছুই পরিবর্তন করতে পারে না। জাজানো হ'ল এনিমে, অনেকগুলি ছবি নিয়ে। বিপরীতে, আজাক্স sth তৈরিতে ভাল নয় তবে পরিবর্তিত HTML এ HTML পৃষ্ঠায় ভাল।

আমার মতে, আপনি যদি সর্বত্র অজ্যাক্স ব্যবহার করতে চান। যখন আপনাকে প্রথমে ডেটা সহ কোনও পৃষ্ঠার সূচনা করতে হবে তখন আপনি অ্যাজাক্স সহ জ্যাঙ্গো ব্যবহার করতে পারেন। তবে কিছু ক্ষেত্রে, আপনার সার্ভার থেকে কিছু ছাড়াই একটি স্ট্যাটিক পৃষ্ঠা প্রয়োজন, আপনাকে জ্যাঙ্গো টেমপ্লেট ব্যবহার করার দরকার নেই।

আপনি যদি না ভাবেন যে অ্যাজাক্স সেরা অভ্যাস। আপনি অ্যানিমের মতো সবকিছু করতে জাজানো টেমপ্লেট ব্যবহার করতে পারেন।

(আমার ইংরেজী ভালো না)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.