Django 开发-管理站点管理应用数据
Posted 走自己的路-让别人也有路走
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 开发-管理站点管理应用数据相关的知识,希望对你有一定的参考价值。
Django 开发-管理站点管理应用数据
安装就不再详细介绍了,跟前段时间写的python scrapy的安装方法差不多,关于pip可以参考下python下实现scrapy这篇文章,可以用pip安装。
#pip install django
创建项目
安装完之后,首先得创建个项目。必须使用Django先创建一个项目,作为后面所有web网站的基础模块,也可以说是基础框架。
#django-admin startproject mysite
可以看到,在当前目录下生成了个website文件夹,该文件下面的目录架构如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
manage.py: 主要用于通过命令行创建、管理web应用,后面会用到会经常用到,具体包含哪些明天可以通过python manage.py 回车看一下,查看某条具体应用怎么用可以通过python manage.py help command 回车查看。
init.py:用于标明mysite是个包,python手册是“The init.py files are required to make Python treat the directories as containing packages”这样描述的。意思是通过init.py表示该目录表示一个包。
settings.py:配置文件,现在里面已经包含了一些基本框架的配置,后面如果要加入其它的web应用,需要通过这个配置文件加入。
urls.py:主要用于设计用户访问网站是,给我们后台视图之间的映射关系,这样更容易保证URL的整洁,可读。
wsgi.py:wsgi服务器相关,我也不太懂,有兴趣的自己去找找资料。
数据库的建立
在mysite.py 目录下的setting.py可以进行数据的配置,默认是利用python自带的sqlite数据库,如果要改用其它数据库,可以通过这里配置。我这里就用默认的数据库。
DATABASES =
'default':
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
还可以setting.py文件中看到下面几行配置,这几行配置主要是说明已经安装的应用,如果后续需要加入应用,就需要在这里进行添加。
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
默认情况下,INSTALLED_APPS包含下面的应用,它们都是Django 与生俱来的
django.contrib.admin —— 管理站点。
django.contrib.auth —— 认证系统。
django.contrib.contenttypes —— 用于内容类型的框架。
django.contrib.sessions —— 会话框架。
django.contrib.messages —— 消息框架。
django.contrib.staticfiles —— 管理静态文件的框架。
这些应用至少需要一个数据库,所以在使用之前必须先创建数据数据库。
#python manage.py migrate
启动服务,访问系统自带的应用
# python manage.py runserver 0.0.0.0:8000
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
May 31, 2016 - 14:06:03
Django version 1.8.2, using settings 'mysite.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
可以看到我这里启动服务的时候ip用的是0.0.0.0,而不是127.0.0.0(只能本机访问),这是为了能够在虚拟机外面的主机上访问。
![这里写图片描述](https://img-blog.csdn.net/20160531221633578)
前面setting.py的时候说了,项目中已经自带了一些应用,如admin,auth等,这里访问一下admin应用, http://192.168.255.141:8000/admin ,跳转到了用户管理页面。管理页面的具体在后面讲述。
![这里写图片描述](https://img-blog.csdn.net/20160531222020832)
#创建应用
可以通过manage.py 命令创建应用
创建应用
可以通过manage.py 命令创建应用,下面通过创建一个投票网站,参照Django 1.8.2手册。
#python manage.py startapp poll
会在mysite目录下创建一个polls目录,这个就是新建应用的目录结构:
polls/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.p
开始写一个web应用的时候,我们可能最先需要的就是进行数据库设计,而在Django中用模型(models)表示。用models能够设计出各种关系型数据库,一对一、一对多、多对一。
设计models
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
上述代码非常直观。每个模型都用一个类表示,该类继承自django.db.models.Model。每个模型有多个类的属性变量,而每一个类的属性变量又都代表了数据库表中的一个字段。
每个字段通过Field类的一个实例表示 —— 例如字符字段CharField和日期字段DateTimeField。这种方法告诉Django,每个字段中保存着什么类型的数据。
创建模型对应的数据库
上面只是把数据库之间的关系通过模型表示出来了,而并未真正的创建数据库。前面已经提到过,如果要在一个项目中添加应用,必须在配置文件中的INSTALLED_APPS 条目中添加应用。
INSTALLED_APPS = (
'django.contrib.admin',
...
'django.contrib.staticfiles',
'polls', #新添加
)
此外需要polls迁移到项目中生效,必须执行下面命令。
#python manage.py makemigrations polls
Django使用迁移文件来保存对模型的更改(即数据库模式的更改)—— 所谓迁移文件其实就是磁盘上的普通文件。 如果愿意,你可以阅读迁移文件来了解新模型; 这个迁移文件就是 polls/migrations/0001_initial.py。
再次执行前面讲解的项目中创建数据库的方法,由于在setting已经加入了polls,所以相关的数据库polls 相关的数据库也会被创建。
$ python manage.py migrate
如果要查看创建polls相关的数据库到底执行了哪些命令,可以通过下面命令查看。
# 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", "question_id") SELECT "choice_text", "votes", "id", NULL 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;
管理站点
前面我们在启动服务后,访问了admin管理里面,访问之后,可以看到需要我们输入用户名、密码登录,登录之后可以通过web页面管理数据。但是这个用户名、密码是怎么来的呢?
可以通过命令创建超级用户。
# python manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: 1234@126.com
Password:
Password (again):
Superuser created successfully.
利用超级用户登录admin页面
登录之后,超级用户可以新增用户组、用户。
新增用户后,需要用户相应的权限,我这里赋予test用户有超级用户权限,还有管理权限,
用test用户重新登录页面
给polls应用通过后台添加数据
如果想通过后台管理choice,则需要把choice 模型在admin.py文件中进行注册
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, 'fields': ['question_text']),
('Date information', 'fields': ['pub_date'], 'classes': ['collapse']),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
QuestionAdmin 类:主要设置字段在页面上的显示方式。
ChoiceInline类:内嵌类,modle指定要内嵌的模型。
管理站点可以管理为polls的数据了
以上是关于Django 开发-管理站点管理应用数据的主要内容,如果未能解决你的问题,请参考以下文章
Django后端开发学习笔记使用Models并在Django自带管理页面中管理数据