流程目录:
- 创建Django项目
- 创建应用
- 模型:
数据库配置
数据库表的定义
定义模型类
生成数据表 - 模板
- 视图
- 服务器管理
- 站点管理
具体步骤
1.创建虚拟环境:
mkvirtualenv 虚拟环境名称
2.进入虚拟环境:
workon 虚拟环境名称
3.创建Django项目:
django-admin startproject 项目名称
4.进入项目,创建应用:
python manage.py startapp booktest
5.在pycharm中打开项目
-- 数据库的配置:settings.py中DATABASES项配置
--DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase', 你手动创建的数据库要和这个名称一样
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1', (本地:这里填localhost也可以)
'PORT': '3306',
}
NAME: 指定的数据库名,如果是 sqlite 的话,就需要填数据库文件的绝对位置
USER: 数据库登录的用户名,mysql 一般都是 root
PASSWORD:登录数据库的密码,必须是 USER 用户所对应的密码
HOST: 由于一般的数据库都是 C/S 结构的,所以得指定数据库服务器的位置,我们一般数 据库服务器和客户端都是在一台主机上面,所以一般默认都填 127.0.0.1
PORT:数据库服务器端口,mysql 默认为 3306
(HOST 和 PORT 都可以不填,使用默认的配置,但是如果你有更改默认配置的话,就需要填入更改后的 )
-- 数据库表的定义:(需求)
-- 定义模型类:Modle里面,引入包(from django.db import models)
模型继承自 models.Model类
-- 生成数据表:激活模型,编辑settings.py,在INSTALLED_APPS中添加应用
-- TEMPLATES : 'DIRS': [os.path.join(BASE_DIR,'templates')],
6.生成迁移:
python manage.py makemigrations 迁移文件被生成到应用的migrations
python3 在django 项目配置文件目录下的__init__.py文件中引入:
import pymysql
pymysql.install_as_MySQLdb()
此操作,一定先手工创建自己的数据库:
进入数据库:mysql -uroot -p
创建数据库:create database 库名 charset="utf8";
7.执行迁移:
python manage.py migrate
8.可以进行下数据测试,(实现数据库中的增删改查,记得引入你对应内容):
python manage.py shell
(1)进入python shell:
python manage.py shell
(2) 引入需要的包:
from booktest.models import BookInfo,HeroInfo
from django.utils import timezone
from datetime import *
(3)查询所有图书信息:
BookInfo.objects.all()
(4)新建图书信息:
b = BookInfo()
b.btitle="射雕英雄传"
b.bpub_date=datetime(year=1990,month=1,day=10)
b.save()
(5)查找图书信息:
b=BookInfo.objects.get(pk=1)
(6)修改图书信息:
b.btitle=u"天龙八部"
b.save()
(7)删除图书信息:
b.delete()
(8)关联对象的操作:
对于HeroInfo可以按照上面的操作方式进行
添加,注意添加关联对象
h=HeroInfo()
h.hname=u'郭靖'
h.hgender=True
h.hcontent=u'降龙十八掌'
h.hBook=b
h.save()
关联集合
获得关联集合:返回当前book对象的所有hero
h1= b.heroinfo_set.all()[0]
h1.hname
django 默认每个主表的对象都有一个是外键的属性,可以通过它来查询到子表的信息。
这个属性的名称默认是以子表的名称小写加上_set来表示
默认返回的是一个querydict对象
有一个HeroInfo 存在,必须要有一个 BookInfo 对象,提供了创建关联的数据:
h=b.heroinfo_set.create(hname=u'黄蓉',hgender=False,hcontent=u'打狗棍法')
9.模版:(html)
在网站目录下创建templates至目录
修改settings.py文件,TEMPLATES : 'DIRS': [os.path.join(BASE_DIR,'templates')],
在模板中访问视图传递的数据:{{输出值}} #变量,对象,属性
{%执行的代码%}
定义index.html模板(首页)
定义detail.html模板(详述)也可以自定义很多
10.视图:
对WEB请求进行回应(渲染),视图是一个python函数,定义在views.py中
视图接受reqeust对象作为第一个参数,包含了请求的信息
引入信息:
from django.http import HttpResponse(网页返回的内容)
还有你自己定义的模型方法名称:如from booktest.models import BookInfo,HeroInfo
(使用render()简化写代码)web响应
11.url:
Django 使用正则表达式匹配请求的url,一但匹配成功,调用应用的试图
至匹配路径部分,即去除域名、参数后的字符串
1、在项目的urls.py中配置url,跳转到指定应用中去 (一定要引入模块)
2、在应用的url.py中配置视图的url
12.启动服务器:
python mange.py runserver + ip:port(+后可有可无)
默认:127.0.0.1:8000
如果修改文件不需要重启服务器,如果增删文件需要重启服务器
*13.站点管理:
1.内容发布:
负责增、删、改内容
2.公共访问
django会根据定义的模型类完全自动化地生成管理模块
14.创建管理员:
python manage.py createsuperuser
15.界面本地化:
中文定制:
编辑settings.py,设置编码、时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
16.向admin注册booktest的模型
打开booktest/admian.py文件。注册模型:
form django.contrib import admin
from models import xxx
admin.site.register(xxx)
自动实现增删改查
17.自定义管理页面
django提供了admin.ModelAdmin类
from django.contrib import admin
# Register your models here.
from booktest.models import BookInfo,HeroInfo
关联BookInfo对象
class HeroInfoInline(admin.StackedInline):
model = HeroInfo
extra = 2 #额外显示关联的记录数
class BookInfoAdmin(admin.ModelAdmin):
#定义显示的列表,可以点击列头进行排序
list_display = ['id','btitle','bpub_date']
#定义过滤字段,过滤框会出现在右侧
list_filter = ['btitle']
#定义搜索字段,出现在上方
search_fields = ['btitle']
#分页
list_per_page = 1
fieldsets = [
('基本信息',{'fields':['btitle']}),
('更多信息', {'fields': ['bpub_date']}),
]
inlines = [HeroInfoInline]
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(HeroInfo)
网友评论