您的位置:首页 > 编程语言 > Go语言

Django入门探索(一)

2017-03-01 20:40 169 查看

Django的入门探索

蜗牛这几天有学了学python,买的书里面用一个Django的教程,蜗牛细细看了看。下面是蜗牛的笔记。

ps:代码不是蜗牛的,蜗牛只是添加了点儿自己的想法和笔记。

首先这是一个制作笔记的网站。

教材上是要安装虚拟环境的,蜗牛前前后后折腾了很久,安装成功了,但是总是会有问题,而且每次都要提前激活环境很是不爽,最后发现不用也没什么问题(至少现在没有碰见什么问题),于是就果断不用了。

安装Django

安装好python之后,利用下面的命令:

pip install Django


之后执行命令:

Django-admin.py startproject learning_log .


一定要注意后面那个点不要忘了。

之后产生一个learning_log的文件夹,里面有几个文件。

其中:

__init__.py这个是包的文件,python包都要用。

settings是配置文件,因为Django的工程是由好几个应用程序组成的,稍后会看到,每个应用程序都会在这里注册

urls:输入一个地址,在这里找到对应的视图函数,就是映射

wsgi:帮助Django提供它创建的文件,Web服务器网关接口


创建数据库

因为蜗牛之前用过flask,也稍微接触过servlet,在蜗牛的印象里面和数据库打交道就是得有SQL语句什么的,忽然发现这个框架不用,有“模型”,之后Django会帮你弄数据库……

执行命令:

python manage.py migrate


我们称修改数据库的操作为“迁移数据库”。

首次执行这个命令Django会创建一个数据库,里面有必要的表。

到这个时候其实就能看到一点成果了,在终端输入:

python manage.py runserver


启动服务器,之后打开浏览器输入127.0.0.1:8000

你就能看见美丽的Django提供的页面。

当然它也说了:现在其实你还啥都没做呢。只是环境稍微搭建起来了。

创建你的应用程序

前面说过一点,Django项目是由一系列的应用程序组成的。

执行下面的命令

python manage.py startapp learning_logs


注意现在是learning_logs,多了个s。

现在就创建了一个app,你可以看见多了一个文件夹,里面有下面的文件:

admin:注册模型用的地方。Django创建的模型不用注册,但是自己的模型要注册

migrations:迁移文件。

views:这个是视图,不过蜗牛总觉得应该叫路由。

还有几个文件,不重要


定义模型

首先就要和数据库打交道。

models.py文件:

from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Topic(models.Model):

text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)

def __unicode__(self):
return self.text

一个类就是一个模型。
这个模型的属性对应着数据库表中的字段。

有两个字段:text和date_added。

但是这时候只是弄了模型,还没有反应到数据库中。


前面说过,Django自己的模型不用激活但是自己的模型要先激活。

settings.py

这个文件很大,只截取要修改的地方。

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learning_logs',
]

注意最一行,这个就是注册。


模型也写了,也注册了,于是下面就能更新到数据库中了:

也叫迁移数据库:

python manage.py makemigrations learning_logs


上面这个命令是生成一个迁移文件。

python manage.py migrate


这个文件才是真正的迁移数据库。

这时在打开数据库,会发现一个lerning_logs_topic表。

这个表有俩字段,一个是text,一个是date_added


都是套路:

1。定义模型。2。生成迁移文件。3。迁移数据库

这样Django会根据模型的定义创建对应的表。

超级用户

Django有管理网站,但是这个网站只能是超级用户(管理员)使用,普通用户不能登录。

管理员可以看到所有的信息,也就是说管理员能看到个人添加的话题等信息。

创建超级用户:

在终端执行:

python manage.py createsuperuser

会提示数据名字和email和密码。

建立好之后,再次打开数据库,你会发现在auth_user中多了条记录,名字是你自己起的,密码是散列。

那么问题就来了,自己并没有定义user这个模型,那这表是哪里来的呢
4000
?

其实user模型Group模型以及另外的一些模型都是Django创建好的。

记住这个用户的id是1,以后要用到。


注册模型:

刚说了,自己定义的模型是要注册的,user等不用

admin.py

其实想想也知道在哪里,模型属于应用程序,那这个admin也就是在models对应的文件夹了。

from django.contrib import admin

# Register your models here.
from learning_logs.models import Topic

admin.site.register(Topic)

这就注册了模型


到目前为止已经可以访问Topic并且能添加Topic了。

这时打开127.0.0.1:8000/admin会看到美丽的页面。

不过这里遗留一个问题:

http://127.0.0.1:8000/admin/learning_logs/topic/

你点击这个会弹到对应的页面,但是并没有配置这个的路由啊?

而且这个链接也可以用:

http://127.0.0.1:8000/admin/learning_logs/topic/1/change/

难道是Django已经做好了?

说实话如果不深入理解框架的话,总有种隔靴搔痒的感觉。

定义模型Entry

Entry就是每个Topic下面的那个条目

同样在models.py下
只写了要修改的部分

class Entry(models.Model):
topic = models.ForeignKey(Topic)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)

class Meta:
verbose_name_plural = 'entries'

def __unicode__(self):
return self.text[:50] + "..."


对,写完模型要生成迁移文件,然后迁移数据库。

python manage.py makemigrations learning_logs

python manage.py migrate


上面两步就完成了。

因为已经迁移了数据库,现在在数据库中能看到:
learning_logs_entry
这个表

Entry建立了三个字段,topic,text和date_added。

其实Djange是根据model建立数据库的,只是你看不到而已。

在DDL中是这样的:

Table [learning_logs_entry]
Fields: 4
[id]: integer NOT NULL
[text]: text NOT NULL
[date_added]: datetime NOT NULL
[topic_id]: integer NOT NULL
Foreign Keys: 1
[] ([topic_id]) REFERENCES [learning_logs_topic]([id])
Indexes: 2
[] PRIMARY
[id] AUTOINCREMENT
[learning_logs_entry_19b4d727]
[topic_id]
Triggers: 0
Unique constraints: 0
Check constraints: 0


有很多细节被掩藏了。

建立了模型,生成了数据库迁移文件,迁移了数据库,之后要干嘛?

自己建立的模型要注册。

admin.py

from django.contrib import admin

# Register your models here.
from learning_logs.models import Topic, Entry

admin.site.register(Topic)
admin.site.register(Entry)


这时候登录是会看到entry的。不过你要是把superuser忘了,你可以再建立一个,可以多次建立。

但是蜗牛还是忍不住想,这里添加entry会关联到topic。

那这个是怎么实现的?居然不用自己传的么?难道一个外键就搞定了?

还有http://127.0.0.1:8000/admin/learning_logs/entry/这样的网站是谁定义的?

我怎么就不记得定义过这样的网站呢?

不过这时候登录的还是admin管理网站,是不是和这个也有关系?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: