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管理网站,是不是和这个也有关系?
相关文章推荐
- Django入门探索(二)
- [Django入门知识浅介]第一个Django程序:Hello World
- python代码自动补全配置及Django入门Demo
- django rest framework 入门1-序列化 Serialization
- 【day 10】python编程:从入门到实践学习笔记- 基于Django框架的Web开发-Django入门(一)
- Vue2.0 探索之路——vuex入门教程和思考
- django template language入门
- django基础入门(6)-模板
- Django入门-6:视图-HttpReqeust对象
- Django 入门Demo
- OGRE3D入门探索01:将渲染窗口嵌入到Win32主窗口
- django入门配置,一个简单的 hello world例子
- Django入门实践(一)
- 探索Django载入模板的顺序
- Django入门(六) 动态URL
- Django入门(七) django的缓存
- 探索Windows命令行系列(2):命令行工具入门
- [python网站开发] 一.Django入门知识及创建第一个网站
- django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.django入门实践
- Django基础入门之谈架构