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管理网站,是不是和这个也有关系?
- Django入门探索(一)
- Django入门探索(二)
- Django 探索(一) HelloWorld
- Django入门(一)
- Django入门学习 (一)
- Django一(安装&入门)
- Python Django基础教程(一)(入门)
- Django学习笔记(一)-入门
- Python django 入门学习系列(一)
- django入门一(整体流程)
- django入门(一)
- Scrapy研究探索(一)——基础入门
- WCF探索之旅(一)——入门
- Scrapy研究探索(一)——基础入门
- 一 Django 1.5.4 入门
- django(一)--- 安装django
- Django快速入门(入门)
- Django入门(二)
- UVA.136 Ugly Numbers (优先队列)
- js的一些知识点的总结
- sprintf的三个要点
- maven项目转web项目的一点小问题
- Bootstrap Scrollspy Plugin
- Django入门探索(一)
- RS232,RS485波形分析
- table中如何消除td间距
- CODEVS 1174 靶形数独
- 【Goodbye2014】Codeforces 500C New Year Book Reading【贪心+模拟】
- 腾讯云Badjs镜像使用入门
- 运算符重载-流插入运算符和流提取运算符的重载
- 在eclipse里的tomcat发布项目提示404错误,可能的情况
- 2017.2.25 B组 倒霉的小C 题解及其证明