Django入门探索(一)

来源:互联网 发布:淘宝在哪里搜店铺? 编辑:程序博客网 时间:2024/04/30 06:44

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_literalsfrom 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这个模型,那这表是哪里来的呢?其实user模型Group模型以及另外的一些模型都是Django创建好的。记住这个用户的id是1,以后要用到。

注册模型:

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

admin.py其实想想也知道在哪里,模型属于应用程序,那这个admin也就是在models对应的文件夹了。from django.contrib import admin# Register your models here.from learning_logs.models import Topicadmin.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_logspython 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.pyfrom django.contrib import admin# Register your models here.from learning_logs.models import Topic, Entryadmin.site.register(Topic)admin.site.register(Entry)

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

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

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

还有http://127.0.0.1:8000/admin/learning_logs/entry/这样的网站是谁定义的?
我怎么就不记得定义过这样的网站呢?

不过这时候登录的还是admin管理网站,是不是和这个也有关系?

0 0
原创粉丝点击