每日测试
1.什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题
我们将网站所使用的静态文件默认都放在static文件夹下
当你要访问静态文件(boostrap框架)时路径开头应该以/static/开头如:/static/bootstrap-3.3.7-dist/js/bootstrap.min.js
以下配置解决接口前缀不断变化,html页面上路径引用不需要反复变化
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}">script>
2.request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项
if request.method == 'POST':
return HttpResponse('来了,宝贝')
return render(request,'login.html')
3.django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换
'ENGINE': 'django.db.backends.mysql',
pymysql.install_as_MySQLdb()
4.什么是django orm,如何使用django orm,数据库迁移命令如何书写
作用:能够让一个不懂sql代码的小白 也能通过python面向对象的方式简单快捷的操作数据库
缺点:封装程度太高,效率太低,不如手动写sql语句
class User(models.Model):
id = models.AutoField(primary_key=True)
username = models.CharField(max_length=32)
password = models.IntegerField()
pythondj mange.py makemigrations
pythondj manage.py migrate
5.orm字段的增删改查与数据的增查如何实现
info = models.CharField(max_length=32,verbose_name='个人简介',null=True)
hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study')
直接注释对应的字段然后执行数据库迁移的两条命令即可!
user_obj = models.User.objects.filter(username=username).first()
res = models.User.objects.create(username=username,password=password)
res = models.User(username=username,password=password)
今日内容概要
- 数据的查 改 删
- Django ORM如何创建表关系
- Django请求生命周期流程图
- 详细的讲Django的每一部分内容
- 路由层(urls.py)
- 虚拟环境
- Django版本区别
今日内容详细
数据的查 改 删
user_queryset = models.User.objects.all()
return render(request,'userlist.html',locals())
{% for user_obj in user_queryset %}
edit_id = request.GET.get('user_id')
edit_obj = models.User.objects.filter(id=edit_id).first()
if request.method == "POST":
username = request.POST.get('username')
password = request.POST.get('password')
将filter查询出来的列表中所有的对象全部更新 批量更新操作
edit_obj.username = username
edit_obj.password= password
从头到尾将数据的所有字段全部更新一边 无论该字段是否被修改
return redirect('/userlist/')
return render(request,'edit_user.html',locals())
def delete_user(request):
delete_id = request.GET.get('user_id')
models.User.objects.filter(id=delete_id).delete()
return redirect('/userlist/')
username password is_delete

Django ORM中如何创建表关系
图书和出版社是一对多的关系 外键字段建在多的那一方 book
图书和作者是多对多的关系 需要创建第三张表来专门存储
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2)
图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面
publish = models.ForeignKey(to='Publish')
如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id
如果你自作聪明的加了_id那么orm还是会在后面继续加_id
后面在定义ForeignKey的时候就不要自己加_id
图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方
authors = models.ManyToManyField(to='Author')
authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中
author_detail = models.OneToOneField(to='AuthorDetail')
OneToOneField也会自动给字段加_id后缀
class AuthorDetail(models.Model):
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
publish = models.ForeignKey(to='Publish') # 默认就是与出版社表的主键字段做外键关联
authors = models.ManyToManyField(to='Author')
author_detail = models.OneToOneField(to='AuthorDetail')

Django请求生命周期流程图

路由层
路由匹配
url(r'testadd',views.testadd)
只要第一个参数正则表达式能够匹配到内容 那么就会立刻停止往下匹配
APPEND_SLASH = False/True
url(r'^admin/', admin.site.urls),
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd),
无名分组
url(r'^test/(\d+)/',views.test)
return HttpResponse('test')
有名分组
url(r'^testadd/(?P\d+)',views.testadd)
def testadd(request,year):
return HttpResponse('testadd')
无名有名是否可以混合使用
url(r'^index/(\d+)/(\d+)/(\d+)/',views.index),
url(
r'^index/(?P\d+)/(?P\d+)/(?P\d+)/',views.index),
反向解析
url(r'^func_kkk/',views.func,name='ooo')
from django.shortcuts import render,HttpResponse,redirect,reverse