Django笔记02
前端页面两种引入外部资源的方式
CDN 内容分发网络
加载本地文件
html文件约定俗成放在templates文件夹下
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
静态文件约定俗成放在static文件下
一般情况下static文件夹下建议分成css,js等相关文件夹实现分层
django静态文件配置 STATIC_URL = '/static/' # 静态文件路径配置 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), os.path.join(BASE_DIR,'static1'), os.path.join(BASE_DIR,'static2'), ]
form表单两种提交方式
1 input type=submit
2 button按钮
form表单默认是get请求,可以通过method参数指定提交方式
参数携带方式 http://127.0.0.1:8000/login/?username=jason&password=123
action三种指定数据提交路径方式
1 全路径 http://127.0.0.1:8000/login/
2 后缀 /login/
3 不写 不写默认提交到当前路径
通常情况下视图函数都是get请求
get请求和post请求
django获取前端请求方式 request.method
获取get请求提交的数据
request.GET 携带了前端所有get请求的数据
username = request.GET.get('username')
取值遵循字典取值,虽然它的value是列表但是默认取最后一个元素
可以通过getlist()获取到列表
获取post请求提交的数据
request.POST 携带了所有post请求数据
username = requetst.POST.get('username')
取值遵循字典取值,虽然它的value是列表但是默认取最后一个元素
可以通过getlist()获取到列表
ORM:对象关系映射
一个类 >>> 数据库的一张表
类的对象 >>> 数据库的一条记录
对象点数据(user_obj.name) >>> 数据库某条记录的某个字段值
优点:不会sql也可以进行开发,大大提高开发效率
缺点:可能sql语句执行效率不高
django连接mysql数据库
1 配置文件:变量名必须全部大写
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test007', 'USER':'root', 'PASSWORD':'123321', 'HOST':'127.0.0.1', 'PORT':3306 } }
2 django orm不会自动创建数据库,需要手动创建
django orm会自动创建表,字段
数据库迁移命令(重点)
python manage.py makemigrations 记录数据库更改操作
python manage.py migrate 操作数据库
orm查询user表所有数据
models.User.objects.all()
orm查询user表的某条数据
user_queryset = models.User.objects.filter(name=name,password=password)
只有queryset对象才能点query获取当前对象所对应的sql语句
可以通过索引的方式从queryset对象中取出数据对象
queryset支持正数索引取值,但是不推荐使用,orm推荐使用first()
user_queryset = models.User.objects.filter(name=name,password=password).first()
只有数据对象才能点出数据
表字段的增删改
只要修改了models.py中的代码,就必须重新执行数据库迁移命令
表字段新增:对于已经有数据的表,新增字段的时候要设置默认值,或者指定该字段可以为空
表字段删除:直接注释掉models.py中的代码
表字段修改:直接修改models.py中的代码
表的增删改查
models.User.objects.all() 获取user表中的所有数据
models.User.objects.filter(id=delete_id).delete() 删除user表中查出的所有数据
models.User.objects.create(name=username,password=password,addr=addr) 在user表中新增一条数据
user_obj = models.User(**request.POST)
user_obj.save() 新增数据
models.User.objects.filter(id=id2).update(name=username,password=password,addr=addr)更新数据
edit_obj = models.User.objects.filter(id=id2).first()
edit_obj.name = username
edit_obj.password = password
edit_obj.addr = addr
edit_obj.save() 更新数据的另一种方式
只要queryset对象就可以连续点出对于的方法
查表时可以用get获取,但是不推荐
django请求声明周期
图书管理系统表设计
书籍 >>> 出版社 一对多(注意:外键说法描述只有一对多,没有多对一)
作者 >>> 书籍 多对多
出版社
publish = models.ForeignKey(to='Publish') # 关联publish表 关联字段默认就是主键id
authors = models.ManyToManyField(to='Author') # 自动帮你创建书籍与作者的关系表 不会在当前表里面创建字段