1.创建项目
默认项目的文件介绍:
manage.py:【项目的管理,启动项目、创建app、数据管理】【不要动】
__init__.py:
settings.py:【项目配置:链接数据库、注册app等】【***常常修改***】
urls.py:【url和函数的对应关系】【***常常修改***】
asgi.py:【接收网络请求】【不要动】
wsgi.py:【接收网络请求】【不要动】
2.APP
-项目
-app,用户管理【表结构、函数、HTML模板、css】
-app,订单管理【表结构、函数、HTML模板、css】
-app,后台管理【表结构、函数、HTML模板、css】
-app,网站【表结构、函数、HTML模板、css】
-app,API【表结构、函数、HTML模板、css】
..
注意:我们开发比较简洁,用不到多app,一般情况下,项目创建一个app即可。
创建app命令:python manage.py startapp app-name
多app:
│ manage.py
├─demo
│ │ asgi.py
│ │ settings.py
│ │ urls.py【url->函数】
│ │ wsgi.py
│ └─__init__.py
├─demo2
│ │ admin.py【固定,不用动】django默认提供了admin后台管理
│ │ apps.py【固定,不用动】app启动类
│ │ models.py【***重要***】对数据库操作
│ │ tests.py【固定,不用动】单元测试
│ │ views.py【***重要***】函数
│ │ __init__.py
│ └─migrations【固定,不用动】数据库变更记录
│ __init__.py
└─templates
3.快速上手
- 确保app已注册【settings.py】
- 编写URL和视图函数对应关系【urls.py】
- 编写视图函数【views.py】
- 启动django项目
- 命令行启动
python manage.py runserver
- Pycharm启动
3.1 再写一个页面
- url -> 函数
- 函数
3.2 templates模板
3.3 静态文件
在开发过程中一般将:
- 图片
- CSS
- js
当作静态文件处理
3.3.1 static目录
在app目录下创建static文件夹
3.3.2 引入静态文件
4. 模板语法
本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。
视图函数的render内部:
1.读取含有模板语法的HTML文件
2.内部进行渲染(模板语法执行并替换数据),最终得到,只含有HTML标签的字符串
3.将渲染(替换)完成的字符串返还给用户浏览器。
案例:伪联通消息中心
5. 请求和响应
关于重定向:
案例:用户登录
6. 数据库操作
- MySQL数据库 + pymysql
import pymysql
# 1.连接MySQL
conn = pymysql.connect(host="127.0.0.1", port = 3306, user = "root", password="root123",charset="utf8",db="unicom")
# 2.发送指令
cursor.execute("insert into admin(username,password,mobile) values ('wupeiqi','qwe123','15155555555')")
conn.commit()
# 3.关闭
cursor.close()
conn.close()
- Django开发操作数据库更简单,内部提供了ORM框架
6.1 安装第三方模块
pip install mysqlclient
6.2 ORM
ORM可以帮助我们做两件事:
- 创建、修改、删除数据库中的表(不用写SQL语句)【无法创建数据库】
- 操作表中的数据(不用写SQL语句)
6.21 自己创建数据库
- 启动MySQL服务(或者其他数据库,例如Oracle、sqlite3)
- 自带工具创建数据库
create database gx_day15 DEFAULT CHARSET uft8 COLLATE utf8_general_ci;
使用Django自带sqlite3数据库时(创建Django app时会自动生成一个db.sqlite3,但是此时是空白的,因为没有进行迁移):
- 1)在命令行中迁移Django自带的表
python manage.py migrate
- 2)创建一个admin管理后台
python manage.py createsuperuser
admin是Django自带的后台管理系统,可以通过它对数据库进行增删改查操作,被授权的用户才可以直接在admin管理数据
urls.py中默认有admin路由
6.2.2 Django连接数据库
在settings.py文件中进行配置和修改,默认使用的是sqlite3数据库
采用MySQL连接时的配置:
6.2.3 Django操作表
- 创建表
- 删除表
- 修改表
创建表:在models.py文件中:
ORM会根据这个类创建一张表:
create table app01_userinfo(
id bigint auto increment primary key, /*如果没有主键,ORM底层自动添加一个自增主键*/
name varchar(32),
password varchar(64),
age int
);
执行命令:
python manage.py makemigrations
python manage.py migrate
注意:app需要提前注册
在表中新增列时,由于已存在列中可能已有的数据,所以新增列必须要指定新增列对应的数据:
- 1.手动输入一个值
- 设置默认值
age = models.IntegerField(default=2)
- 允许为空
data = models.IntegerField(null=True, blank=True)
以后在开发中如果想要对表结构进行调整:
- 在models.py文件中操作类即可
- 命令
python manage.py makemigrations
python manage.py migrate
6.2.4 操作表中的数据
# ***1.新建***
# Department.objects.create(title="销售部")
# Department.objects.create(title="IT部")
# Department.objects.create(title="运营部")
# UserInfo.objects.create(name="吴佩琦",password="123",age=19)
# UserInfo.objects.create(name="朱虎飞",password="666",age=29)
# UserInfo.objects.create(name="吴阳军",password="666")
# ***2.删除***
# UserInfo.objects.filter(id=3).delete()
# Department.objects.all().delete()
# ***3.获取数据***
# 获取到的数据是QuerySet类型,相当于列表[对象,对象,...]
# 3.1获取符合条件的所有数据
# data_list = UserInfo.objects.all()
# for obj in data_list:
# print(obj.id, obj.name, obj.password, obj.age)
# data_list = [对象,],只有一个对象的QuerySet
# data_list = UserInfo.objects.filter(id=1)
# print(data_list)
# 3.2获取第一条数据【对象】
# row_obj = UserInfo.objects.filter(id=1).first()
# print(row_obj.id, row_obj.name, row_obj.password, row_obj.age)
# ***4.更新数据***
# UserInfo.objects.all().update(password=999)
# UserInfo.objects.filter(id=2).update(age=999)
# UserInfo.objects.filter(name="朱虎飞").update(age=999)