আমি স্বয়ং চালাতে চান manage.py createsuperuserউপর djangoকিন্তু এটি seams একটি ডিফল্ট পাসওয়ার্ড সেট করার কোন উপায় নেই।
আমি এটি কিভাবে পেতে পারি? এটি জাঙ্গো ডাটাবেসে স্বাধীন হতে হবে be
আমি স্বয়ং চালাতে চান manage.py createsuperuserউপর djangoকিন্তু এটি seams একটি ডিফল্ট পাসওয়ার্ড সেট করার কোন উপায় নেই।
আমি এটি কিভাবে পেতে পারি? এটি জাঙ্গো ডাটাবেসে স্বাধীন হতে হবে be
উত্তর:
আপনি যদি সরাসরি ব্যবহারকারীকে উল্লেখ করেন তবে আপনার কোড এমন প্রকল্পগুলিতে কাজ করবে না যেখানে AUTH_USER_MODEL সেটিংটি অন্য পৃথক ব্যবহারকারী মডেলে পরিবর্তিত হয়েছে। ব্যবহারকারী তৈরি করার আরও সাধারণ উপায় হ'ল:
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@myproject.com', 'password')" | python manage.py shell
মূল উত্তর
সুপারভাইজার তৈরি করার জন্য এখানে স্ক্রিপ্টের একটি সাধারণ সংস্করণ রয়েছে:
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" | python manage.py shell
echo "from django.contrib.auth.models import User; User.objects.filter(email='admin@example.com').delete(); User.objects.create_superuser('admin@example.com', 'admin', 'nimda')" | python manage.py shell
from django.contrib.auth.models import Userআর কাজ করে না এটি ব্যবহার করুন: from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@myproject.com', 'my secure password')
আমি নিজেই এর উত্তর খুঁজছিলাম। আমি জাজানো কমান্ড তৈরি করার সিদ্ধান্ত নিয়েছি যা বেস createsuperuserকমান্ড ( গিটহাব ) প্রসারিত করে :
from django.contrib.auth.management.commands import createsuperuser
from django.core.management import CommandError
class Command(createsuperuser.Command):
help = 'Crate a superuser, and allow password to be provided'
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
parser.add_argument(
'--password', dest='password', default=None,
help='Specifies the password for the superuser.',
)
def handle(self, *args, **options):
password = options.get('password')
username = options.get('username')
database = options.get('database')
if password and not username:
raise CommandError("--username is required if specifying --password")
super(Command, self).handle(*args, **options)
if password:
user = self.UserModel._default_manager.db_manager(database).get(username=username)
user.set_password(password)
user.save()
উদাহরণ ব্যবহার:
./manage.py createsuperuser2 --username test1 --password 123321 --noinput --email 'blank@email.com'
এটি এখনও ডিফল্ট কমান্ড ব্যবহার সমর্থন করার সুবিধা রয়েছে, যখন একটি পাসওয়ার্ড নির্দিষ্ট করার জন্য অ ইন্টারেক্টিভ ব্যবহারের অনুমতি দেয়।
createsuperuserএই ছিল --passwordখুব ক্ষেত্র
./manage.py createsuperuser2 --username test1 --password 123321 --noinput --email 'blank@email.com'
createsuperuser2এই শ্রেণিতে কীভাবে ম্যাপ করা হয়, ফাংশন
createsuperuser2.pyএবং উপরের লিঙ্কটি থেকে এটি সংজ্ঞায়িত ডিরেক্টরি কাঠামোতে স্থাপন করতে হবে।
আমি './manage.py শেল-সি' ব্যবহার করি:
./manage.py shell -c "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'adminpass')"
এটি কোনও অতিরিক্ত প্রতিধ্বনি ব্যবহার করে না, এর সুবিধা রয়েছে যে আপনি এটিকে কার্যকর করার জন্য একটি ডকার ধারককে দিতে পারেন। Sh -c "..." ব্যবহারের প্রয়োজন ছাড়াই যা আপনাকে জাহান্নামের হাত থেকে রেহাই দিয়ে যাবে into
এবং মনে রাখবেন যে ইমেলটির চেয়ে প্রথমে ব্যবহারকারীর নাম আসে।
আপনার যদি কাস্টম ব্যবহারকারী মডেল থাকে তবে তা আমদানি করতে হবে এবং নাও auth.models.User
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'
users.User আপনাকে তা থেকে আমদানি করতে হবেauth.User
আমি একটি ডেটা মাইগ্রেশন চালানোর পরামর্শ দিচ্ছি , সুতরাং যখন প্রকল্পে মাইগ্রেশন প্রয়োগ করা হয়, মাইগ্রেশনগুলির অংশ হিসাবে একটি সুপারসুসার তৈরি করা হয়। ব্যবহারকারীর নাম এবং পাসওয়ার্ড পরিবেশ পরিবর্তনশীল হিসাবে সেটআপ করা যেতে পারে। পাত্রে অ্যাপ্লিকেশন চালানোর সময় এটিও দরকারী ( উদাহরণ হিসাবে এই থ্রেডটি দেখুন )
আপনার ডেটা মাইগ্রেশন এর পরে দেখতে হবে:
import os
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('<your_app>', '<previous_migration>'),
] # can also be emtpy if it's your first migration
def generate_superuser(apps, schema_editor):
from django.contrib.auth.models import User
DJANGO_DB_NAME = os.environ.get('DJANGO_DB_NAME', "default")
DJANGO_SU_NAME = os.environ.get('DJANGO_SU_NAME')
DJANGO_SU_EMAIL = os.environ.get('DJANGO_SU_EMAIL')
DJANGO_SU_PASSWORD = os.environ.get('DJANGO_SU_PASSWORD')
superuser = User.objects.create_superuser(
username=DJANGO_SU_NAME,
email=DJANGO_SU_EMAIL,
password=DJANGO_SU_PASSWORD)
superuser.save()
operations = [
migrations.RunPython(generate_superuser),
]
আশা করি এইটি কাজ করবে!
সম্পাদনা : কেউ কেউ এই পরিবেশের পরিবর্তনশীলগুলি কীভাবে সেট করবেন এবং জ্যাঙ্গোকে সে সম্পর্কে সচেতন করবেন তা প্রশ্ন উত্থাপন করতে পারে। অনেক উপায় আছে এবং অন্যান্য এসও পোস্টগুলিতে এর জবাব দেওয়া হয়েছে, তবে দ্রুত পয়েন্টার হিসাবে একটি .envফাইল তৈরি করা ভাল ধারণা। এরপরে আপনি পাইথন-ডটেনভ প্যাকেজটি ব্যবহার করতে পারেন , তবে যদি আপনি পাইপেনভের সাথে ভার্চুয়াল পরিবেশ স্থাপন করেন তবে এটি স্বয়ংক্রিয়ভাবে আপনার .envফাইলটিতে এনভায়ারদের সেট করবে । তেমনি, ডকার-কম্পোজের মাধ্যমে আপনার অ্যাপ্লিকেশন চালানো আপনার .envফাইলটিতে পড়তে পারে ।
root/mysite/myapp/migrations- যদি আপনি ডকগুলি পড়ে থাকেন তবে এটি ব্যাখ্যা করে যে আপনি কীভাবে একটি খালি স্থানান্তর তৈরি করতে পারেন এবং এটি পরিবর্তন করতে পারেনpython manage.py makemigrations --empty yourappname
settings.pyফাইলটিতে .env ভারগুলি লোড করার জন্য আপনার নিম্নলিখিতটি উল্লেখ করার কথা উল্লেখ করা উচিত :python # loading .env from dotenv import load_dotenv from pathlib import Path env_path = Path('.', '.env') load_dotenv(dotenv_path=env_path)
জ্যাঙ্গো 3.0 এর হিসাবে আপনি ডিফল্ট ব্যবহার করতে পারেন createsuperuser --noinputকমান্ড ও বিভিন্ন পরিবেশের যেমন (পাসওয়ার্ড সহ) সমস্ত প্রয়োজনীয় ক্ষেত্রগুলি সেট DJANGO_SUPERUSER_PASSWORD, DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_EMAILউদাহরণস্বরূপ। --noinputপতাকা প্রয়োজন।
এটি আসল ডক্স থেকে আসে: https://docs.djangoproject.com/en/3.0/ref/django-admin/#django-admin-createsuperuser
এবং আমি সবেমাত্র যাচাই করেছি - এটি কাজ করে। এখন আপনি সহজেই সেই পরিবেশের ভারগুলি রফতানি করতে পারেন এবং createsuperuserআপনার স্ক্রিপ্ট এবং পাইপলাইনগুলিতে যুক্ত করতে পারেন ।
আপনি সুপারসার ব্যবহারের অটোমেশন পরিচালনা করতে একটি সাধারণ অজগর স্ক্রিপ্ট লিখতে পারেন। Userমডেল মাত্র একটি স্বাভাবিক জ্যাঙ্গো মডেল, তাই আপনি Stand-Alone জ্যাঙ্গো স্ক্রিপ্ট লেখার স্বাভাবিক প্রক্রিয়া অনুসরণ চাই। উদা:
import django
django.setup()
from django.contrib.auth.models import User
u = User(username='unique_fellow')
u.set_password('a_very_cryptic_password')
u.is_superuser = True
u.is_staff = True
u.save()
আপনি createsuperuserকয়েকটি অপশনও পাস করতে পারেন , যথা --noinputএবং এবং --usernameযা আপনাকে স্বয়ংক্রিয়ভাবে নতুন সুপারউসার তৈরি করতে দেয়, তবে আপনি তাদের জন্য পাসওয়ার্ড সেট না করা পর্যন্ত তারা লগইন করতে পারবেন না।
cretesuperuser, তবে কীভাবে পাসওয়ার্ড সেট করবেন? আমি এটি বাশ স্ক্রিপ্টের ভিতরে করতে চাই ...
বর্তমান সর্বাধিক ভোট দেওয়া উত্তর:
উন্নত সংস্করণটি হ'ল:
USER="admin"
PASS="super_password"
MAIL="admin@mail.com"
script="
from django.contrib.auth.models import User;
username = '$USER';
password = '$PASS';
email = '$MAIL';
if User.objects.filter(username=username).count()==0:
User.objects.create_superuser(username, email, password);
print('Superuser created.');
else:
print('Superuser creation skipped.');
"
printf "$script" | python manage.py shell
if not User.objects.filter(username = username).exists(),
DJANGO_SUPERUSER_USERNAME=testuser \
DJANGO_SUPERUSER_PASSWORD=testpass \
python manage.py createsuperuser --noinput
noinputঅন্যান্য DJANGO_SUPERUSER_PASSWORD=testpass python manage.py createsuperuser --username testuser --email admin@email.com --noinput
আমি ৪২১ টাকায় একটি লাইনার ব্যবহার করেছি তবে একটি ত্রুটি বার্তা পেয়েছি: ১) আমি মনে করি আমি Manager isn't available; 'auth.User' has been swapped for 'users.User'জাজানো (১.১০) ২ এর পরবর্তী সংস্করণটি ব্যবহার করছি ) তৈরি করার জন্য পরামিতিগুলির ক্রমটি ভুল ছিল er
সুতরাং আমি এটি দিয়ে প্রতিস্থাপন করেছি:
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(email='admin@example.com', is_superuser=True).delete(); User.objects.create_superuser('admin', 'admin@example.com', 'nimda')" | python manage.py shell
এবং আমি যেভাবে সত্যই সন্তুষ্ট তা হ'ল এটি হিরকু স্থাপনার উপরও কাজ করে:
heroku run echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(email='admin@example.com', is_superuser=True).delete(); User.objects.create_superuser('admin', 'admin@example.com', 'nimda')" | python manage.py shell
এটি বার বার সুন্দরভাবে কাজ করবে। আমি এটি একটি প্রকল্পের শুরুতে ব্যবহার করছি তাই পরে ঘটে যাওয়া ভয়াবহ ক্যাসকেড মুছে ফেলার বিষয়ে চিন্তা করবেন না don't
ফ্যাব্রিক থেকে লোকাল () এর ভিতরে এটি চালানোর ক্ষেত্রে কিছুটা সমস্যার পরে আমি পুনরায় পর্যালোচনা করেছি। যা ঘটছিল বলে মনে হয়েছিল তা হল পাইপের প্রতীকটির অর্থ হিরকু না হয়ে স্থানীয়ভাবে এটি ব্যাখ্যা করা হচ্ছে। এটিকে বাছাই করতে আমি উদ্ধৃতিতে কমান্ডটি আবৃত করি। তারপরে পুরো পাইথন কমান্ডের একক উদ্ধৃতিতে পাইথন স্ট্রিংয়ের জন্য ট্রিপল ডাবল উদ্ধৃতি ব্যবহার করতে হয়েছিল।
heroku run "echo 'from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(email="""admin@example.com""", is_superuser=True).delete(); User.objects.create_superuser("""admin""", """admin@example.com""", """nimda""")' | python manage.py shell"
উপরে অ্যাডাম চারনকের পদ্ধতির উপর ভিত্তি করে একটি সমাধান এখনই পাইথন প্যাকেজ হিসাবে উপলব্ধ। এটি তিনটি পদক্ষেপ নেয়:
ইনস্টল করুন: pip install django-createsuperuserwithpassword
সক্রিয় করুন: INSTALLED_APPS += ("django_createsuperuserwithpassword", )
প্রয়োগ করুন:
python manage.py createsuperuserwithpassword \
--username admin \
--password admin \
--email admin@example.org \
--preserveএটাই.
খুব সহজ, পোস্ট সিঙ্কডিবি সংকেত শুনুন এবং একটি কনফিগারেশন ফাইল থেকে সুপারজারের শংসাপত্রগুলি পড়ুন এবং এটি প্রয়োগ করুন।
চেকআউট জ্যাঙ্গো-বুটআপ
এই ছোট অজগর স্ক্রিপ্টটি একটি সাধারণ ব্যবহারকারী বা একটি সুপারভাইজার তৈরি করতে পারে
#!/usr/bin/env python
import os
import sys
import argparse
import random
import string
import django
def main(arguments):
parser = argparse.ArgumentParser()
parser.add_argument('--username', dest='username', type=str)
parser.add_argument('--email', dest='email', type=str)
parser.add_argument('--settings', dest='settings', type=str)
parser.add_argument('--project_dir', dest='project_dir', type=str)
parser.add_argument('--password', dest='password', type=str, required=False)
parser.add_argument('--superuser', dest='superuser', action='store_true', required=False)
args = parser.parse_args()
sys.path.append(args.project_dir)
os.environ['DJANGO_SETTINGS_MODULE'] = args.settings
from django.contrib.auth.models import User
django.setup()
username = args.username
email = args.email
password = ''.join(random.sample(string.letters, 20)) if args.password is None else args.password
superuser = args.superuser
try:
user_obj = User.objects.get(username=args.username)
user_obj.set_password(password)
user_obj.save()
except User.DoesNotExist:
if superuser:
User.objects.create_superuser(username, email, password)
else:
User.objects.create_user(username, email, password)
print password
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
--superuser এবং --password বাধ্যতামূলক নয়।
--Superuser সংজ্ঞায়িত না করা থাকলে, সাধারণ ব্যবহারকারী তৈরি করা হবে - - পাসওয়ার্ড সংজ্ঞায়িত না হলে একটি এলোমেলো পাসওয়ার্ড তৈরি হবে
Ex :
/var/www/vhosts/PROJECT/python27/bin/python /usr/local/sbin/manage_dja_superusertest.py --username USERNAME --email TEST@domain.tld --project_dir /var/www/vhosts/PROJECT/PROJECT/ --settings PROJECT.settings.env
এটি হিরোকু পোস্ট_ডেপ্লয় এবং একটি পূর্বনির্ধারিত অ্যাপ্লিকেশন.জসন ভেরিয়েবলের জন্য আমি একসাথে আঁকড়েছি :
if [[ -n "$CREATE_SUPER_USER" ]]; then
echo "==> Creating super user"
cd /app/example_project/src
printf "from django.contrib.auth.models import User\nif not User.objects.exists(): User.objects.create_superuser(*'$CREATE_SUPER_USER'.split(':'))" | python /app/example_project/manage.py shell
fi
এটির সাহায্যে আপনার একক এনভির ভেরিয়েবল থাকতে পারে:
CREATE_SUPER_USER=admin:admin@example.com:password
আমি শেল - কম্যান্ড অপশনটি পছন্দ করি তবে কমান্ড স্ক্রিপ্টে কীভাবে নিউলাইন চরিত্রটি পাওয়া যায় তা নিশ্চিত নয়। নিউলাইন ছাড়া ifএক্সপ্রেশনটি সিনট্যাক্স ত্রুটিতে ফল দেয়।
কমান্ড প্রম্পটে যান এবং টাইপ করুন:
C:\WINDOWS\system32>pip install django-createsuperuser
Collecting django-createsuperuser
Downloading https://files.pythonhosted.org/packages/93/8c/344c6367afa62b709adebee039d09229675f1ee34d424180fcee9ed857a5/django-createsuperuser-2019.4.13.tar.gz
Requirement already satisfied: Django>1.0 in c:\programdata\anaconda3\lib\site-packages (from django-createsuperuser) (2.2.1)
Requirement already satisfied: setuptools in c:\programdata\anaconda3\lib\site-packages (from django-createsuperuser) (41.0.1)
Requirement already satisfied: sqlparse in c:\programdata\anaconda3\lib\site-packages (from Django>1.0->django-createsuperuser) (0.3.0)
Requirement already satisfied: pytz in c:\programdata\anaconda3\lib\site-packages (from Django>1.0->django-createsuperuser) (2018.7)
Building wheels for collected packages: django-createsuperuser
Running setup.py bdist_wheel for django-createsuperuser ... done
Stored in directory: C:\Users\Arif Khan\AppData\Local\pip\Cache\wheels\0c\96\2a\e73e95bd420e844d3da1c9d3e496c92642a4f2181535440db2
Successfully built django-createsuperuser
Installing collected packages: django-createsuperuser
যদি মাইগ্রেশনটি কার্যকর না হয় তবে জ্যাঙ্গো অ্যাপ্লিকেশন ফোল্ডারে যান এবং নিম্নলিখিতগুলি কার্যকর করুন
তারপর বিঙ্গো।
শেল_প্লাস দিয়ে এটি আসলে অনেক সহজ
echo "User.objects.create_superuser('test@test.com', 'test')" | python manage.py shell_plus
অন্যরা যেমন উল্লেখ করেছে, জাঙ্গো 3.0 এর মাধ্যমে আপনি পরিবেশের ভেরিয়েবলের মাধ্যমে শংসাপত্রগুলি পাস করতে পারেন। তবে এই পদ্ধতিটি অনেক বেশি নমনীয়, কারণ এটি আপনাকে অন্য যে কোনও জটিল কাজ যেমন সমস্ত পরীক্ষার ব্যবহারকারীদের অপসারণ, ইত্যাদি করার অনুমতি দেয় etc.