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) 重新设置