如何在django上自动创建createuperuser

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在django上自动创建createuperuser相关的知识,希望对你有一定的参考价值。

1. 创建项目
运行面命令创建 django 项目项目名称叫 mysite :

$ django-admin.py startproject mysite
创建项目目录:

mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

1 directory, 5 files
说明:

__init__.py :让 Python 该目录发包 (即组模块)所需文件 空文件般需要修改
manage.py :种命令行工具允许种式与该 Django 项目进行交互 键入python manage.py help看能做 应需要编辑文件;目录纯便
settings.py :该 Django 项目设置或配置
urls.py:Django项目URL路由设置目前空
wsgi.py:WSGI web 应用服务器配置文件更细节查看 How to deploy with WSGI
接修改 settings.py 文件例:修改 LANGUAGE_CODE、设置区 TIME_ZONE

SITE_ID = 1

LANGUAGE_CODE = 'zh_CN'

TIME_ZONE = 'Asia/Shanghai'

USE_TZ = True
面启 [Time zone]() 特性需要安装 pytz:

$ sudo pip install pytz
2. 运行项目
运行项目前我需要创建数据库表结构我使用默认数据库:

$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
启服务:

$ python manage.py runserver
看面输:

Performing system checks...

System check identified no issues (0 silenced).
January 28, 2015 - 02:08:33
Django version 1.7.1, using settings 'mysite.settings'
Starting development server at
Quit the server with CONTROL-C.
端口8000启本服务器, 并且能台电脑连接访问 既服务器已经运行起现用网页浏览器访问 应该看令赏悦目淡蓝色 Django 欢迎页面始工作

指定启端口:

$ python manage.py runserver 8080
及指定 ip:

$ python manage.py runserver 0.0.0.0:8000
3. 创建 app
前面创建项目并且功运行现创建 app app 相于项目模块

项目目录创建 app:

$ python manage.py startapp polls
操作功 mysite 文件夹看已经叫 polls 文件夹目录结构:

polls
├── __init__.py
├── admin.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py

1 directory, 6 files
4. 创建模型
每 Django Model 都继承自 django.db.models.Model
Model 每属性 attribute 都代表 database field
通 Django Model API 执行数据库增删改查, 需要写些数据库查询语句
打 polls 文件夹 models.py 文件创建两模型:

import datetime
from django.db import models
from django.utils import timezone

class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
mysite/settings.py 修改 INSTALLED_APPS 添加 polls:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
添加新 app 我需要运行面命令告诉 Django 模型做改变需要迁移数据库:

$ python manage.py makemigrations polls
看面输志:

Migrations for 'polls':
0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
polls/migrations/0001_initial.py 查看迁移语句

运行面语句查看迁移 sql 语句:

$ python manage.py sqlmigrate polls 0001
输结:

BEGIN;
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));
INSERT INTO "polls_choice__new" ("choice_text", "votes", "id") SELECT "choice_text", "votes", "id" FROM "polls_choice";
DROP TABLE "polls_choice";
ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";
CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");

COMMIT;
运行面命令检查数据库否问题:

$ python manage.py check
再运行面命令创建新添加模型:

$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, polls, auth, sessions
Running migrations:
Applying polls.0001_initial... OK
总结修改模型需要做几步骤:

修改 models.py 文件
运行 python manage.py makemigrations 创建迁移语句
运行 python manage.py migrate模型改变迁移数据库
阅读 django-admin.py documentation查看更 manage.py 用

创建模型我通 Django 提供 API 做测试运行面命令进入 python shell 交互模式:

$ python manage.py shell
面些测试:

>>> from polls.models import Question, Choice # Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
[]

# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> q.save()

# Now it has an ID. Note that this might say "1L" instead of "1", depending
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
>>> q.id
1

# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=)

# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
[]
打印所 Question 输结 []我修改模型类使其输更易懂描述修改模型类:

from django.db import models

class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text

class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
接继续测试:

>>> from polls.models import Question, Choice

# Make sure our __str__() addition worked.
>>> Question.objects.all()
[]

# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
[]
>>> Question.objects.filter(question_text__startswith='What')
[]

# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)

# Request an ID that doesn't exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)

# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)

# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
[]

# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)

>>> q.choice_set.create(choice_text='The sky', votes=0)

>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.
>>> c.question

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
[, , ]
>>> q.choice_set.count()
3

# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
[, , ]

# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
>>>
面部测试涉及 django orm 相关知识详细说明参考 DjangoORM

5. 管理 admin
Django优秀特性, 内置Django admin台管理界面, 便管理者进行添加删除网站内容.

新建项目系统已经我设置台管理功能见 mysite/settings.py:

INSTALLED_APPS = (
'django.contrib.admin', #默认添加台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysite',
)
同已经添加进入台管理 url, mysite/urls.py 查看:

url(r'^admin/', include(admin.site.urls)), #使用设置url进入网站台
接我需要创建管理用户登录 admin 台管理界面:

$ python manage.py createsuperuser
Username (leave blank to use 'june'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
总结
看项目目录结构:

mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
├── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ ├── models.py
│ ├── templates
│ │ └── polls
│ │ ├── detail.html
│ │ ├── index.html
│ │ └── results.html
│ ├── tests.py
│ ├── urls.py
│ ├── views.py
└── templates
└── admin
└── base_site.htm
通面介绍 django 安装、运行及何创建视 图模型清晰认识接深入习 django 自化测试、持久化、间件、 际 化等知识
参考技术A 创建项目以后,在项目目录里面./managepy createsuperuser

如何像在 Django admin 中一样从模型自动创建视图?

【中文标题】如何像在 Django admin 中一样从模型自动创建视图?【英文标题】:How to create views automatically from model as in Django admin? 【发布时间】:2012-04-28 12:42:54 【问题描述】:

我开始使用 Django,我对从模型自动创建视图的可能性印象深刻。 所以,我想知道其他 web 框架上是否有这样的功能。我知道 RoR 脚手架,但这并不完全相同,因为您需要手动更改视图以防更改相关模型。

【问题讨论】:

正如 Gerard 的链接所指出的,该功能称为“通用视图”。 在 Rails 3 中有一个称为“通用操作”的替代方法 [yehudakatz.com/2009/12/20/generic-actions-in-rails-3/][1] [1]: yehudakatz.com/2009/12/20/generic-actions-in-rails-3 我发现的另一种选择是使用 css 布局生成工具。对于 Ruby on Rails,有指南针和蓝图。这篇文章解释了如何使用它们nicksda.apotomo.de/2010/11/… 【参考方案1】:

对于那些在这里寻找答案的人,也许 django-baker (https://github.com/krisfields/django-baker.git) 会满足您的需求。

pip install django-baker

然后将 django_baker 添加到 INSTALLED_APPS 并运行

python manage.py bake your_app_name

请注意,之前您需要从您的应用中删除 urls.py 和 views.py 以便生成它们。

然后它会生成所有骨架的东西。

【讨论】:

这并没有直接解决这里提出的问题,而是添加了相关信息,可能对其他人有所帮助。【参考方案2】:

https://docs.djangoproject.com/en/dev/topics/class-based-views/

【讨论】:

【参考方案3】:

我想我找到了一种可能的解决方案。这个概念被称为模型驱动开发。有相当多的 java 框架提供了直接从模型创建一个相当简单的应用程序的能力。这篇文章介绍了其中一些http://www.javaneverdie.com/java-frameworks/java-domain-driven-frameworks-review/

【讨论】:

以上是关于如何在django上自动创建createuperuser的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中禁用自动创建 ID?

如何像在 Django admin 中一样从模型自动创建视图?

如何自动化 django 通用视图的 url?

使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库

如何自动创建 Django 应用程序备份

在 django 中创建其他对象后如何自动创建新对象?