django(一)
django
1. django的准备工作
django的下载
pip install django==1.11.23 -i 国内源
django项目的创建
django-admin startproject 项目名
django项目的启动
python manage.py runserver 可以接ip地址
django app的创建
python manage.py startapp app名字
2. 配置
templates 模板 dirs[os.path.join(BASE_DIR,'templates')]
DATABASES 数据库 暂时用mysql 相应的配置
INSTALLED_APPS=[ 'appname.apps.AppnameConfig'] app安装
STATIC_URL = '/static/' 静态文件别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
##之后使用的所有相关前端的文件,都放在static文件里,路径前加上/static/ * 这里的static是 STATIC_URL里面的/static/ 并不是你创建的static文件,即使你创建os.path.join(BASE_DIR,'lala') 你还是要使用/static/开头*
]
3. 使用数据库
- 创建数据库
- 在
__init__.py
下 写上
import pymysql
pymysql.install_as_MySQLdb()
替换mysqldb
- models里面创建类(表)
- 执行迁移命令
python manage.py makemigrations
创建迁移脚本 , 记录models里面的表的变化
python manage.py migrate
执行迁移脚本 同步表
4. 准备完毕
- urls下 写路径 , 对应视图函数views.xxx
- 创建视图函数xxx , 接收请求对象 , request
request 的几种方法
request.GET 获取url路径所携带的参数
request.POST form表单携带的提交数据
request.method 请求的方法
- 写逻辑 (用到数据库数据,使用orm,后面详述)
- 响应,返回界面
HttpResponse ('字符串') 返回简单界面
render(request,'模板名',context=content)返回模板界面渲染,context是模板所需要的数据
redirect('/url路径/') 重定向 响应头Location里面:url
相当于 给了一个新的路径,重新请求
- 模板
{{ 变量 }}
{% 关键字/逻辑/语法固定 %} 例如 url for if 需要闭合
{% for i in list%}
其中有一个 forloop.counter 计数
{% endfor%}
----------------------------------------------------------------------
2. ORM 对象关系映射
(Object Relational Mapping)
表结构
类--表
对象--行
属性--字段
1. AutoField(primary_key) 自增 主键
2. CharField(max_lenth = x) 字符串 最大值
3. ForeignKey(类名,on_delete='操作')
描述一种关系 外键约束 一对多 , 写在多的一方
类名可以加引号通过反射
models.CASCADE 级联删除
models.SET(x) 设置成x
4.ManyToMany(类名)多对多的关系 , django会自动创建一张表 存放对应关系 , 可以写在两个关系类的任意一方下 (这种写法操作,相当于外键多关联)
ORM操作
0. 将类导入视图模块views下
以下以Book,Author,Publisher举例
Book----Author 多对一 创建外键字段 ath
Book----Publisher 多对多 publisher创建m2m books
相应的对象
book--Book
pub_obj---Publisher
1 查询
基础查询 : Book.objects.all() 返回Queryset,对象集合列表 , 也就是类(表)的所有(行)对象
Book.objects.filter(条件) 返回满足条件的所有对象,后面加.first()方法可以取出第一个
Book.objects.get(条件) 满足条件的一个对象
外键查询 :
book.ath 返回Author类的外键关联对象
ORM自动生成了一个 ath_id 的字段(外键名_id 的形式)
多对多查询:
pub_obj.books 返回的是一个关系管理对象
pub_obj.books.all() 返回所有pub_obj关联的book对象
2 新增
基础创建 book = Book.objects.create(字段=xx)
book = Book(字段=xx) book.save()
多对多 : pub_obj.books.set(list) 对象列表 book对象列表
3 删除
Book.objects.filter(xx=xx).delete()
book.delete()
4 修改
基础修改 : pub_obj.name = xx
pub_obj.save()
外键字段修改 : book.ath = author 外键对象
book.ath_id = xx 直接赋值外键字段
多对多 : pub_obj.books.set(book_list) 重新设置