一,首先创建一个项目(project),名字为mysite
django-admin startproject
如果运行成功会出现如下的的目录样式
我们会发现执行命令后,新建了一个mysite目录,其中还有一个mysite子目录.这个子目录mysite中一些
项目的设置settings.py文件,总的urls配置文件urls.py以及部署服务器时用到的wsgi.py文件,
init.py是python包的目录结构必须的,和调用有关.大致的各个文件或文件夹的作用如下:
二,新建一个应用app,名字叫polls
app应用与project项目的区别:
三,编写第一个视图
在polls/views.py中编写如下代码
为了使用这个视图,我在polls文件夹下,创建一个urls.py来编写路由路径.
# encoding:utf-8
__author__ = 'Fioman'
__date__ = '2018/11/5 15:07'
from django.conf.urls import url
from .views import *
urlpatterns = [
url(r'^$',index,name='index'),
]
但是这个路由是app中的具体的路由,但是Django项目在运行的时候,路由的分发是从主目录下
的url.py开始分发的,所以我们还要在主urls.py中,总路由二级分发,使用include语句
include语法相当于是多级路由,它把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级
路由进行判断.
include的背后是一种即插即用的思想,项目的路由不关心具体的app的路由策略,
只管往指定的二级路由转发,实现了应用解耦.app所属的二级路由可以根据自己的需要随意编写.
路由设置成功之后,在浏览器中访问http://127.0.0.1:8000/polls/,应该就可以看到消息了
四.模型和后台管理
1. 数据库的安装:
打开mysite/settings.py,找到Django默认的数据库设置.Django默认采用的是SQLite数据库.
如果使用的不是SQLite,比如使用MySql必须在settings.py中作出相应的修改
注意,settings.py中的顶部的INSTALLED_APPS,它列出了所有的项目中被激活的Django应用(app).
你必须将自己定义的app注册到这里,否则应用无法使用.默认情况下:
migrate命令将遍历INSTALL_APPS设置的所有项目,在数据库中创建对应的表,并打印每一条
对应的动作信息.
2. 创建模型
Django通过ORM(对象关系模型)进行数据库操作,通过模型,将Python代码和数据库操作结合起来,
实现对SQL语句的封装.Django通过Python类的形式定义具体的模型,每个模型的物理存在方式就是
一个Python的类Class,每个模型类模型对应数据库的一张表.而每个类的实例代表数据库中一行数据,
类中的每个变量代表数据库中的一个字段.
我们先创建两个模型:Question 和 Choice.
编辑models.py
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('published date')
class Choice(models.Model):
# question是外键,关联的外键是Question里面的id字段
# on_delete=models.CASCADE 是级联删除的意思.
# 级联(Cascade):把主表中主键修改为一个新的值时,相应修改子表中外键的值;
# 或者删除主表中主键的记录时,要相应删除子表中外键的记录。
# 外键级联删除的时候,操作主表时会关联到子表,但是操作子表,不会关联到主表。
question = models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
3. 启用模型
模型操作三部曲
4. 静态文件配置
看不明白?有图有真相
5. Django基础必备三件套
响应实例,一个登陆的响应实例,如何实现登陆失败页面提示.
五.ORM (对象关系映射模型)
1. 问题一:为什么要使用ORM
首先不同的程序员对于数据库的操作的熟练程度不一样,程序员写的执行的效率也不敢预期.
所以Django为了开发快捷,使用ORM模型来操作数据库.使用ORM有一下的优点:
① 简单,不用自己写SQL语句
② 开发效率较高
缺点就是,执行效果不能保证是最优的,并且有特殊的语法需要记忆.
2.问题二: ORM中对象和数据库中具体的表的对应关系:
对象 | 表 |
---|---|
类 | 表 |
实例 | 表中的一行记录 |
属性变量 | 表中的字段 |
3.ORM能做哪些事情
1.操作数据表 --> 创建表/删除表/修改表 操作models.py里面的类
2.操作数据行 --> 数据的增删改查
注意: 不能创建数据库,自己动手创建数据库
4.使用Django的ORM详细步骤
1.自己动手创建数据库:
create database 数据库名
2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
3.告诉Django用pymysql代替默认的MYSQLDB 连接MySQL数据库
在项目的init.py中写入一下两句:
import pymysql
告诉Django用pymysql来代替默认的MySQLdb
mysqldb.install_as_MySQLdb()
- 在app下面的models.py文件中定义一个类,这个类必须继承自models.Model
class 类名(models.Model):
...执行两个命令,将在models中的数据库设置,使得其在数据库中生效
4.ORM的增删改查
1.删除:
先找到对象,调用对象的.delete()方法
publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.delete()
或者
models.Publisher.objects.get(id=7).delete()
2.修改:
找到对象,通过修改对象的属性来修改数据库中指定字段的值,要保存.
publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.name = '新出版社的名字'
publisher_obj.save() -> 把修改提交到数据库
3.查询:
从所数据库中获取所有的书籍对象
all_book = Book.objects().all()
4.增加:
先获取新增加的书籍的名称,以及对应的publisher_id值
new_title = request.POST.get('book_title')
new_publisher = request.POST.get('publisher_id')
Book.objects().create(title=new_title,publisher_id=new_publisher)