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自带管理页面中管理数据

Django后端开发学习笔记使用Models并在Django自带管理页面中管理数据

Django 开发-视图开发

Django 开发-视图开发

Django之单表操作

Django 应用开发