模型
1. Django ORM
O(objects):类和对象。
R(Relation):关系,关系数据库中的表格。
M(Mapping):映射。
Django ORM框架的功能:
a) 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。
b) 根据设计的模型类生成数据库中的表格。
c) 通过方便的配置就可以进行数据库的切换。
2. Django数据库配置
2.1 创建项目
今天演示使用MySQL数据库,这是Web项目首选的数据库。
进入虚拟环境dj_py3
workon dj_py3
创建项目demo2。
django-admin startproject demo2
创建应用
python manage.py startapp news
注册应用,打开demo2/settings.py文件,将应用添加进去
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'news' )
2.1 mysql命令回顾
登录mysql
数据库:
mysql –uroot –p
查看有哪些数据库:
show databases
创建数据库:
create database test2 charset=utf8
#切记:指定编码
使用数据库:
use dj_py3;
查看数据库中的表:
show tables;
2.2 Django配置使用mysql数据库
修改settings.py中的DATABASES。
DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', # 设置使用mysql数据库 'NAME':'dj_py3', # 指定数据库 'USER':'root', # 用户名 'PASSWORD':'mysql', #数据库所在主机的ip 'PORT':3306 #端口号 'HOST':'localhost' } }
注意:django框架,只能生产数据表,不会自动帮我们生成mysql数据库,所以我们需要自己去创建。
2.3 切换mysql数据库之后不能启动服务器
需要安装操作mysql数据库的包,python2环境和python3环境有以下区别。
a) python2**需要安装mysql-python:
pip install mysql-python
b) python3需要安装pymysql:
pip install pymysql
python3中安装好pymysql,需要在demo2/init.py中加如下内容:
import pymysql pymysql.install_as_MySQLdb()
3. 复习案例
1、 设计模型类NewsInfo并生成表
模型类设计,在昨天的基础上增加属性read和comment,另外设置软删除标记属性isDelete。
软删除标记:删除数据时不做真正的删除,而是把标记数据设置为1表示删除,目的是防止重要的数据丢失。
models.py代码如下
from django.db import models class NewsInfo(models.Model): title = models.CharField(max_length=50) #标题 context = models.TextField() #内容 b_date = models.DateField() #日期 read =models.IntegerField() #阅读量 comment = models.IntegerField() # 评论数 is_delete = models.BooleanField(default=0) #逻辑删除
生成迁移:python manage.py makemigrations
执行迁移 :python manage.py migrate
2、通过站点管理添加数据
注册模型类:打开应用目录下的admin.py文件,编写代码如下
from django.contrib import admin # Register your models here. from .models import NewsInfo class NewsInfoAdmin(admin.ModelAdmin): list_display = ['id','title','b_date'] admin.site.register(NewsInfo,NewsInfoAdmin)
创建管理员账号:python manage.py createsuperuser
启动项目:python manage.py runserver 主机ip:端口号
登录站点管理,添加数据
3、编写视图函数并配置URL。
同样我们先分为两个页面,一个新闻列表展示页,一个详情页
创建视图函数
打开views.py,创建index视图函数
from django.shortcuts import render # Create your views here. from .models import NewsInfo def index(request): news_list = NewsInfo.objects.all() context={'news_list':news_list} return render(request,'templates/index',context)
配置urls,
在应用目录下创建一个urls.py文件,url配置代码如下
from django.conf.urls import url,include from .views import * urlpatterns = [ url(r'^$',include(index)), url(r'^index',include(index)), ]
然后再demo/urls.py里面,加入一行代码关联到应用的urls配置
url(r'^',include('news.urls'))
4、创建模板文件。
创建模板目录:在项目目录下,创建templates目录,再在templates目录中创建一个和应用同名的目录news,
配置模板路径:在想项目目录的stttings.py下面,对TEMPLATES里的DIRS项,进行修改
'DIRS': [os.path.join(BASE_DIR,'templates')]
创建模板:在news下创建index.html模板文件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <!--新闻列表--> <h1>{ {h1}}</h1> <!--遍历出所有新闻对象--> {%for news in news_list%} <!--显示每条新闻的标题和日期,设置超链接,链接到详细内容页面--> <li><a href="/{ {news.id}}">{ {news.title}}</a>