वहाँ है कि क्या आप "उपयोग के मामले" है या नहीं बदलने के लिए तैयार कर रहे हैं पर निर्भर करता है आपके सवाल का कई जवाब हो सकता है:
क) आप उपयोग के मामले में परिवर्तन नहीं कर सकते हैं: यह संभव नहीं है, क्योंकि एक Django सत्र ब्राउज़र सत्र से जुड़ा हुआ है चाहे वह कई ब्राउज़र विंडोज इंस्टेंस या टैब हों।
बी) आप उपयोग केस बदल सकते हैं: उपयोगकर्ता अभी भी अपने कोड में किसी भी संशोधन के बिना कई ब्राउज़रों (या क्रोम/क्रोमियम में निजी ब्राउज़िंग मोड) का उपयोग करके इसे प्राप्त कर सकता है।
ग) आप अपनी वेबसाइट है कि उपयोगकर्ता अलग विंडो में एक ही सत्र में कई सक्रिय प्रोफ़ाइल की अनुमति में एक "उपयोगकर्ता" स्विच सुविधा को लागू कर सकते हैं, यह GitHub संगठन स्विच सुविधा या फेसबुक पेज के लिए उद्देश्य में समान है/संगठन-स्विच लेकिन आपके पास कई टैब में कई उपयोगकर्ता की प्रोफ़ाइल हो सकती है जो कि जिथब या फेसबुक पर नहीं है।
सी प्राप्त करने के लिए) आप अपने "उपयोगकर्ता" मॉडल से जुड़ी एक "SubProfile" मॉडल उदाहरणों की आवश्यकता है, और क्वेरी स्ट्रिंग पैरामीटर के आधार पर प्रत्येक भेजे अनुरोध पर सही SubProfile को सक्रिय करने और अनुरोध भर subprofile की जानकारी को बनाए।
1) मुझे लगता है कि आप पहले से ही है कि Subprofile
django.contrib.auth.models.User
के लिए एक विदेशी कुंजी के साथ एक मॉडल की तरह कुछ है, तो आप भी एक राय यह है कि एक उपयोगकर्ता अपने subprofile को बदलने की अनुमति हो सकती है। सबप्रोफाइल-स्विच काम करने के लिए, इसे वर्तमान टैब सत्र में जानकारी को जारी रखने की आवश्यकता है, जो उपप्रोफाइल का उपयोग कर रहा है, जिसके लिए इसे क्वेरी स्ट्रिंग में पैरामीटर जोड़ने की आवश्यकता है क्योंकि यह केवल एक ही स्थान है जो टैब को बाध्य करता है और उपयोगकर्ता नहीं -session। उदाहरण के लिए "subprofile = 123"। । आप ठीक से एक रूप एट साथ subprofile मान्य करने के लिए की जरूरत है अल, दृश्य इस तरह दिखता है:
def select_subprofile(request):
if request.method == 'POST':
form = SubProfileSelectForm(request)
if form.is_valid():
subprofile = form.cleaned_data['subprofile']
url = '%s?subprofile' % (reverse('homepage'), subprofile)
return redirect(url) # the redirect is something like '/homepage?subprofile=123'
else:
form = SubProfileSelectForm()
return render(request, 'myapp/subprofile_select.html', {'form':form})
यह दृश्य प्रत्येक खेल के पहले पृष्ठ हो सकता है।
2) इसके बाद, आपको वर्तमान टैब के लिए उपयोगकर्ता के उप-लाभ को पुनर्प्राप्त करने की आवश्यकता है। इस मामले के लिए हम middleware में क्वेरी स्ट्रिंग का उपयोग करेंगे (howtos on SO और example middlewares bundled with Django देखें यदि आपको नहीं पता कि यह क्या है) वर्तमान SubProfile
उदाहरण request.user
को अटैचमेंट करने के लिए उपयोग किया जा सकता है। प्रत्येक आवक अनुरोध के लिए मिडलवेयर इच्छा SubProfile उदाहरण वर्तमान उपयोगकर्ता ऑब्जेक्ट के लिए क्वेरी स्ट्रिंग में पाया वर्तमान subprofile जानकारी के लिए इसी देते हैं, मिडलवेयर इस तरह दिखता है:
class SubProfileMiddleware(object):
def process_request(self, request):
subprofile = request.GET.get('subprofile', None)
if subprofile:
# it's important to check for user here or malicious users will be
# able to use Subprofiles of other users
subprofile = Subprofile.objects.filter(user=request.user, id=subprofile)
# This can also be written
# subprofile = request.user.subprofile_set.filter(id=subprofile)
if not subprofile:
# this is a malicious user
raise Http403
else:
request.user.subprofile = subprofile
else:
# set default subprofile
request.user.subprofile = self.user.default_subprofile
इस तरह आप अपने अनुप्रयोग के हर दृश्य में उपयोग कर सकते है SubProfile
पर subprofile
request.user
की विशेषता पर उदाहरण। यदि कोई वैध क्वेरी स्ट्रिंग subprofile=123
है, तो उपयोगकर्ता के पास यह सबप्रोफाइल सक्रिय होगा, अगर यह डिफ़ॉल्ट उपप्रोफाइल नहीं है।
मान लें कि आपका आवेदन Organization
मॉडल जिनमें से प्रत्येक उदाहरणों दीवारें हैं, तो उपयोगकर्ता के संदेश पोस्ट कर सकते हैं जिस पर एक subprofile उपयोग करने के साथ एक आवेदन पत्र है, समारोह एक दीवार पर एक संदेश पोस्ट करने के निम्नलिखित हस्ताक्षर post_on_organization_wall(subprofile, message, organization)
, का मानना है कि इस का उपयोग समारोह इस तरह दिखेगा:
def organization_wall_post(request, organization):
organization = Organization.objects.get_object_or_404(organization)
if request.method == 'POST':
form = MessageForm(request.POST)
if form.is_valid():
post_on_organization_wall(request.user.subprofile, message, organisation)
else:
form = MessageForm()
return render(request, 'organisation/wall_post.html', {'form': form})
3) अब आप अनुरोध भर subprofile की जानकारी को बनाए की जरूरत है। ऐसा करने का सबसे आसान तरीका हरकॉल को {% url %}
पर अपने url
टेम्पलेट टैग पर प्रतिस्थापित करता है जो उपप्रोफाइल कुंजी के अनुरोध क्वेरी स्ट्रिंग उपस्थिति की जांच करता है और इसे अनुरोधित यूआरएल में जोड़ता है। आप the code of Django's url template tag का पुन: उपयोग कर सकते हैं।
मुझे यकीन नहीं है कि Django डोमेन के लिए कुकी को कैसे दबा सकता है जिसके लिए अनुरोध नहीं किया गया था ** या ** www.2.com/playCDS --- रीडायरेक्ट-टू ---> www.me. com/playCDS तो आप रेफरर के अनुसार उपयोगकर्ता प्रोफ़ाइल बदलते हैं, है ना? मैंने अभी भी अपना जवाब http://stackoverflow.com/a/12571909/140837 पोस्ट किया है, मैं तदनुसार अपडेट करूँगा लेकिन मूल उत्तर वहां है, सेटिंग्स उपयोगकर्ता प्रोफ़ाइल परिवर्तन के लिए तर्क क्योंकि आपके मामले में ऐसा लगता है कि " सबप्रोफाइल दृश्य बदलें "। – amirouche
क्या कोई «सबप्रोफाइल» मॉडल है? – amirouche
क्या आपने मेरे उत्तर की समीक्षा की? – amirouche