【创建虚拟环境】
命令:mkvirtualenv 名字 -p /usr/bin/python3 # 配置环境
- 退出虚拟环境 deactivate
- 进入虚拟环境 workon 虚拟环境名称
- 删除虚拟环境 rmvitualenv 虚拟环境名称
进入环境后:pip freeze #显示环境中的应用
安装Django:pip install django==1.11.7
pip list #显示环境中所有的包和版本
【创建Django项目】
django-admin startproject HelloDjango #创建一个工程 HelloDjango
wsgi.py:web网关服务接口
为项目创建应用:python manage.py startapp App #名为App
启动服务:python manage.py runserver
runserver:内置的开发者服务器
红字报错:有文件没有进行迁移
pycharm打开django工程:打开manage.py的上一级目录
配置项目的环境:setting -> project int -> + Vir En -> Exist
【测试环境 => 演示环境 => 生产环境】
【文件内容setting.py:】
- 项目所在的目录
- 密钥,生产环境:已上线,线上环境
- 调试开关,不要在生产环境中打开
- 允许主机,所有人都能访问 ["*"]
- 内置app
- 中间件
- 跟路由
- 模板
- 调用WSGI应用,部署时使用?
- 数据库,SQLIte,轻量级嵌入式数据库,Android,IOS,WP手机中
- 验证,密码验证器
- 语言编码,中文 ''zh-hans"
- 统一协调时间,中国 "Asia/shanghai"
【数据库迁移】
执行迁移:python manage.py migrate
【路由文件urls.py:】
【视图函数views.py】
【Templates 模板配置】
第一种在应用中写T
显示T中index网页
加个路由
render()直接渲染
"index.html" 输入不智能提示,设置
settings中注册应用
访问(ip+端口):http://192.168.124.128:8000/index/
第二种模板T使用(开发中使用该方法,模板可以继承,复用)
templates创建在工程目录下,并在其中创建home.html
【拒绝上帝文件/类(什么都能做,文件多)】
-- 项目如果逻辑过于复杂,可以进行拆分
-- 拆分为多个App
-- 然后继续拆分路由器 urls
-- 在App(即Two)中创建自己的urls
-- urlpatterns 路由规则列表
-- 在根 urls 中进行子路由的包含
-- 子路由使用
-- 根路由规则 + 子路由规则
-- r'two/' + r'^index/' => http://192.168.124.128:8000/two/index/
python manage.py startapp Two #创建一类似App应用
创建的东西使用前需注册
【分发路由:Two中创建urls.py】
将Two中的路由告诉项目中的根路由
访问:http://192.168.124.128:8000/two/index/
【models 使用了ORM技术(Object Rekational Mapping 对象关系映射)】
-- 将业务逻辑和SQL进行了解耦合
-- 直接对数据库进行操作,不需要用数据库语言,相当于翻译
-- object.save()
-- object.delete()
-- 关系型数据库
-- 先定义数据库 DDL
-- django 中通过 models 定义实现 数据库表的定义
从模型models => 变成数据库 Student表
然后进行迁移
python manage.py makemigrations #1.生成迁移文件
python manage.py migrate #2.执行迁移
直接插入数据
代码插入数据
urls
views
开启服务:python manage.py runserver 9000#运行在本机地址的9000端口
浏览器:ip:9000/two/addstudent/
显示插入的学生
ORM抽象出来的操作入口
将学生数据拿出来
浏览器:ip:9000/two/getstudents/
将数据显示在网页上
快捷键:
-- control + p 参数提示
-- shift + f6 重命名,重构,引用该名处同时修改
传值,映射模板,对应
模板语法
更新学生信息
url(r'^updatestudent/', views.update_student),
【更新删除基于查询】
删除学生信息
url(r'^deletestudent/', views.delete_student),
-- 数据操作
-- 增删改查
-- 存储
-- save()
-- 查询
-- 查所有 objects.all()
-- 查单个 objes.get(pk=xx) #主键存在=>更新,不存在=>创建
-- 更新
-- 基于查询的
-- 查询的对象,修改属性,然后save()
-- 删除
-- 基于查询的
-- 调用 delete()
DataBase模块,可以直接连接操作数据库Sqlite和MySQL
三种MySQL连接驱动:
-- 连接mysql驱动
-- python2,3都能直接使用
-- 缺点:对mysql安装有要求,必须指定位置存在配置文件
-- python-mysql
-- python2 支持
-- python3 不支持
-- pymysql
-- python2,python3都支持
-- 它还可以伪装成前面的两个库
-- 安装:pip install pymysql -i https://pypi.douban.com/simple
-- 伪装
【换MySQL数据库】
连接MySQL,创库GP1HelloDjango
mysql -u root -p 111111
mysql> create database GP1HelloDjango charset=utf8;
退出数据库
执行迁移:python manage.py migrate
报错:数据库驱动错误
操作:安装驱动pymysql =》进行伪装
报错:1049, "Unknown database
操作:检查各个环节数据库命名,MySQL初建时,settings.py,pycharm添加
【在views中加载渲染模板原理】
将 模板语言 转化为 HTML语言
python manage.py startapp Three
注册到系统的setting中
Three =》urls =》添加到根路由 =》创建Three的模板文件夹和模板
=》模板经历过程(加载loader =》渲染render)
【SHELL】
用shell进行调试
-- django shell
-- 集成python环境的shell终端
-- 通常在终端中做一些调试工作
-- 如何看待bug
-- 看日志
-- 先看第一条,再看最后一条
-- 梳理思路
-- 程序在哪个位置和预期出现偏差
表关系
-- 1:1
-- 外键添加唯一约束,使之一对一
-- 1:M
-- 外键可以多个,通常做多对一
-- M:N
-- 产生额外一张关系表,在其中关联两张表的主键
数据集连
迁移,映射到库中,生成迁移文件,执行迁移
在班级和学生表中添加信息
1.获取学生的班级
views.py
2.找到班级的所有学生
显示在网页