জাঙ্গো কুকিজ, আমি কীভাবে সেগুলি সেট করতে পারি?


123

আমার একটি ওয়েব সাইট রয়েছে যা দর্শকদের পছন্দ করে এমন একটি অবস্থানের উপর ভিত্তি করে বিভিন্ন সামগ্রী দেখায়। যেমন: ব্যবহারকারী জিপ হিসাবে 55812 এ প্রবেশ করে। আমি জানি কোন শহর এবং অঞ্চলটি দীর্ঘ / দীর্ঘ। এটি হ'ল এবং তাদের বিষয়বস্তু that অঞ্চলে প্রাসঙ্গিক করুন। আমার প্রশ্ন হ'ল আমি কীভাবে এটি কোনও কুকিতে সংরক্ষণ করতে পারি যাতে তারা যখন ফিরে আসে তখন তাদের সর্বদা তাদের জিপ কোডটি প্রবেশ করার প্রয়োজন হয় না?

আমি এটি নীচে দেখতে পাচ্ছি:

  1. তাদের অঞ্চলের ভিত্তিতে অবিরাম কুকি সেট করুন।
  2. যখন তারা কুকি পড়তে ফিরে আসে, জিপকোডটি ধরুন।
  3. তাদের কুকিতে জিপ কোডের উপর ভিত্তি করে সামগ্রী ফিরে আসুন।

আমি কোনও কুকি সেট করার বিষয়ে কোনও শক্ত তথ্য খুঁজে পাচ্ছি না। কোন সাহায্য ব্যাপকভাবে প্রশংসা করা হয়।


এমন একজন সেটিংয়ের জন্য খুঁজছি হয় সেগুলো হল cookieএবং rendering a templateএকসঙ্গে দেখতে এই উত্তর।
দ্য গার্ডেনার

উত্তর:


66

আপডেট : একটি অন্তর্নির্মিত সমাধানের জন্য নীচে পিটারের উত্তরটি দেখুন:

অবিরাম কুকি সেট করতে এটি সহায়ক er

import datetime

def set_cookie(response, key, value, days_expire = 7):
  if days_expire is None:
    max_age = 365 * 24 * 60 * 60  #one year
  else:
    max_age = days_expire * 24 * 60 * 60 
  expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
  response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None)

প্রতিক্রিয়া প্রেরণের আগে নিম্নলিখিত কোডটি ব্যবহার করুন।

def view(request):
  response = HttpResponse("hello")
  set_cookie(response, 'name', 'jujule')
  return response

আপডেট : একটি অন্তর্নির্মিত সমাধানের জন্য নীচে পিটারের উত্তরটি দেখুন:


সেটিংস থাকলে কোনও সমস্যা SSESSION_COOKIE_DOMAIN সেট করা নেই?
পাঁচিকোর

1
যাইহোক জাঙ্গো নিজেই একটি ডিফল্ট SESSION_COOKIE_DOMAIN সেট করে। আপনার যদি একাধিক সাবডোমেন জুড়ে কুকি ভাগ করতে হয় তবে এই সেটিংটি সম্পর্কে ভাবেন।
jujule

12
-1 তার উপর, জাঙ্গো
en/

2
@ ক্লিমেনস: হ্যাঁ এবং আমি পরিশেষে আমার উদাহরণে জ্যাঙ্গো পদ্ধতিটি কল করি; এটি কেবল একটি শর্টকাট (২০০৯ থেকে) যা তারিখ প্রক্রিয়াকরণকে সহজ করে দেয়।
23'8 এ

5
আমি পরোয়া করি না, কিন্তু FYI: বেহুদা সাহায্যকারী ফাংশন ইতিমধ্যে 2009 সালে বেহুদা ছিল docs.djangoproject.com/en/1.0/ref/request-response/... (1.0 জ্যাঙ্গো 2008 সেপ্টেম্বর মুক্তি পায় যতদূর আমার জানা মতে)
ফেটিজিগ

259

জ্যাঙ্গোর সেশন ফ্রেমওয়ার্কটি ব্যবহার করা বেশিরভাগ পরিস্থিতিতে আবশ্যক, তবে জ্যাঙ্গো এখন অনুরোধ এবং প্রতিক্রিয়া অবজেক্টগুলিতে সরাসরি কুকি ম্যানিপুলেশন পদ্ধতি সরবরাহ করে (যাতে আপনার কোনও সহায়ক ফাংশনের প্রয়োজন হয় না)।

একটি কুকি সেট করা হচ্ছে:

def view(request):
  response = HttpResponse('blah')
  response.set_cookie('cookie_name', 'cookie_value')

একটি কুকি পুনরুদ্ধার করা:

def view(request):
  value = request.COOKIES.get('cookie_name')
  if value is None:
    # Cookie is not set

  # OR

  try:
    value = request.COOKIES['cookie_name']
  except KeyError:
    # Cookie is not set

10
কেবল আপডেট করতে - 'has_key' এর পরিবর্তে 'in' ব্যবহার করা হয়েছে।
স্কাজ

15
আরো pythonic পথ request.COOKIES.get ( 'cookie_name') কল করতে হবে
Charlesthk

আমাকে আপনাকে একটি নির্বোধ প্রশ্ন জিজ্ঞাসা করতে দিন, এই কুকিজগুলি অন্যান্য ব্যবহারের সেশনগুলির মধ্যে স্থির থাকে?
দিয়েগো ভিনসিয়াস

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

2
: আপনি হতাশ করছি যদি একটি জ্যাঙ্গো অনুরোধ বস্তু থেকে একটি জ্যাঙ্গো প্রতিক্রিয়া বস্তু তৈরি করার পদ্ধতি, এই পড়া stackoverflow.com/questions/17057536/...
critikaster

19

আপনি ম্যানুয়ালি কুকি সেট করতে পারেন, তবে আপনার ব্যবহারের ক্ষেত্রে (এবং যদি আপনি ভবিষ্যতে আরও ধরণের ধ্রুবক / সেশন ডেটা যুক্ত করতে চান) তবে এটি জাঙ্গোর সেশন বৈশিষ্ট্যটি ব্যবহার করতে আরও বুদ্ধিমান হতে পারে । এটি আপনাকে ব্যবহারকারীর সেশন কুকির সাথে অভ্যন্তরীণভাবে বাঁধা ভেরিয়েবলগুলি পেতে এবং সেট করতে দেয়। এ সম্পর্কে দুর্দান্ত জিনিস হ'ল আপনি যদি কোনও ব্যবহারকারীর সেশনে প্রচুর পরিমাণে ডেটা বেঁধে রাখতে চান তবে সমস্ত কুকিজের মধ্যে সংরক্ষণ করে এইচটিটিপি অনুরোধ এবং প্রতিক্রিয়াগুলিতে প্রচুর ওজন যুক্ত করবে। সেশনগুলির সাথে সেশন কুকি যা কিছু পিছনে পিছনে প্রেরণ করা হয় (তা সত্ত্বেও জাজানোর সেশন ডেটা সংরক্ষণের শেষে ওভারহেড রয়েছে)।


4
ভাল যুক্তি! একটি নোট, আপনি পৃথক ডোমেনের স্ট্যাটিক সামগ্রী হোস্ট করে HTTP ওজন হ্রাস করতে পারবেন (সাবডোমেন নয়), যাতে সেই অনুরোধগুলিতে কুকিজ না পাঠানো হয়। stackoverflow.com/questions/72394/...
জন Paulett

জ্যাঙ্গো সেশনস কাঠামোর অস্তিত্বের ভিত্তিতে @ জনপোল্টের মন্তব্যটি পুরানো। কুকি-ভিত্তিক ওয়ার্কফ্লোতে মোট ডেটা স্টোরেজ হ্রাস করার দরকার নেই।
ক্রিস কনলান

0

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

এখানে জাঙ্গো দর্শন সহ একটি উদাহরণ ...

def homepage(request):

    request.session.setdefault('how_many_visits', 0)
    request.session['how_many_visits'] += 1

    print(request.session['how_many_visits'])

    return render(request, 'home.html', {})

আপনি যদি পৃষ্ঠাটি বারবার দেখতে থাকেন তবে আপনি নিজের কুকিগুলি সাফ না করা, নতুন ব্রাউজারে দেখা, ছদ্মবেশে না যাওয়া বা জাজানো সেশন আইডি কুকির পাশের অন্য যে কোনও কিছু না করা পর্যন্ত আপনি মান 1 থেকে বাড়তে শুরু করবেন।

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