Django学习内容
----django ---MTV ---cookie session ---form组件 ---中间件 ---alax ----博客系统 ----权限组件 ----stark组件 ----crm系统 ----爬虫 ----金融分析
----REST framework + Vue
自学内容
----rest-framework
----flask
预备知识
----jquery
----bootstrap
----django
----ajax
有名分组
Including other URLconfs(路由分发)
#At any point, your urlpatterns can “include” other URLconf modules. This #essentially “roots” a set of URLs below other ones. #For example, here’s an excerpt of the URLconf for the Django website itself. #It includes a number of other URLconfs: from django.conf.urls import include, url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')), ]
url反向解析(使用url 模板标签)
用途:login.html中填写 本URL地址,为了将来不会因为url地址更改,而更改html内容,这里采用别名方式。
wsgiref模块
wsgiref 把请求信息封装成request对象
wsgiref 把请求体组装成响应体格式
视图(views)中函数的参数 request
Template(模板层)---渲染变量 {{ }}
深度查询句点符
forloop.counter
forloop.counter0(从0计数)
Template(模板层)---渲染变量 {{ }}
过滤器{{ var|filter:参数}}
自定义标签和过滤器
Model(模型层)
ORM---对象关系映射
单表记录操作
model.py
class Book(models.Model): title=models.CharField(max_length=32) price=models.DecimalField(max_digits=6,decimal_places=2) create_time=models.DateField() memo=models.CharField(max_length=32,default="") # book_obj.publish: 与这本书籍关联的出版社对象 publish=models.ForeignKey(to="Publish",default=1) # book_obj.author.all(): 与这本书关联的作者对象集合,Queryset [] author=models.ManyToManyField("Author") def __str__(self): return self.title
查询相关API
<1> all(): 查询所有结果
QuerySet
book_l=models.Book.objects.all() <models-->models.py | objects-->管理器>
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
QuerySet <符合条件的结果集> book_l=models.Book.objects.filter(price=134)
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。
Object
models.Book.objects.get(title="数学书")
<5> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 QuerySet
book_l=models.Book.objects.exclude(price=134)
<4> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
QuerySet
models.Book.objects.all().values("title","price")
<9> values_list(*field): 它与values()非常相似,它返回的是一个元组序列
QuerySet
models.Book.objects.all().values_list("title","price")
<6> order_by(*field): 对查询结果排序
QuerySet
models.Book.objects.all().order_by("price") <排序从小到大>
models.Book.objects.all().order_by("-price") <排序从大到小>
<7> reverse(): 对查询结果反向排序
QuerySet
models.Book.objects.all().order_by("price").reverse() <排序从大到小>
<8> distinct(): 从返回结果中剔除重复纪录
QuerySet
<10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
返回的是值
book_list.count()
<11> first(): 返回第一条记录 Object
book_obj=models.Book.objects.all().first()
<12> last(): 返回最后一条记录
Object
book_obj=models.Book.objects.filter(title="语文书").last()
<13> exists(): 如果QuerySet包含数据,就返回True,否则返回False
ANS=models.Book.objects.all().exists()
删除记录&更新记录
多对多关系-创建第三张表
多对多关系-自动创建第三张表,不会生成author字段
出版社信息-select表--values=“{{publish.pk}}”
添加一条新纪录--绑定书籍与作者的多对多关系
从POST中取 多关系 中的值
def addbook(request): if request.method=="POST": title=request.POST.get("title") price=request.POST.get("price") date=request.POST.get("date") publish_id=request.POST.get("publish_id")
# 使用getlist从POST中取多值的列表 author_id_list=request.POST.getlist("author_id_list") print("author_id_list",author_id_list) # 绑定书籍与出版社的一对多的关系 obj=Book.objects.create(title=title,price=price,create_time=date,publish_id=publish_id) # 绑定书籍与作者的多对多的关系 # 不可行方案 # for author_id in author_id_list: # A.objects.create(book_id=obj.pk,author_id=author_id) # 可行方案 # obj.author.add(1,2,3) # obj.author.remove(1,2) # obj.author.clear() obj.author.add(*author_id_list) return redirect("/books/")
错误的--从POST中取 多关系 中的值
在书籍页 展示表格中的author字段
回顾一对多&多对多关系