django-搭建BBS关键点总结
0826自我总结
django-搭建BBS关键点总结
一.关于开口子,直接输入url访问文件内容
django
自带开了个口子是static文件可以直接访问到
手动开口子
urs.py
from django.views.static import serve
urlpatterns = [
url(r\'^avatar/(?P<path>.*)\', serve, kwargs={\'document_root\': 开口文件的路径}),
]
#这里的r\'^avatar/(?P<path>.*),前面的路径等同于后面设置的路径,而下面正则匹配的内容为内容的拼接前面的就是完整的一个路径,这样就可以url直接访问文件夹
二.关于登入验证码中解决并发的问题
解决方法
:将code存在session中
注意点
:如果同时在一个浏览器中打开两个相同的网页,他的code以后的那个网站为准,这是session的特性
三.验证码的生成
https://www.cnblogs.com/pythonywy/p/11408318.html
四.登入后的重要操作
可以利用的auth模块中的login
在登入成功的时候
将uesr对象存放在request中方便后续操作
auth.login(request,user)
也可以在网页中完成是否登入的判断
{% if request.user.is_authenticated %}
完成注销操作
auth.logout(request)
五.表单的查找
#查询当前站点下所有标签对应的文章数
#查询当前站点下所有分类对应的文章数
# 查询所有分类对应的文章数
# 分组查询固定规则:
# filter 在annotate前表示where条件
# values 在annotate前表示group by
# filter 在annotate后表示having条件
# values 在annotate后表示取值
# category_ret=models.Category.objects.all().values(\'pk\').annotate(cou=Count(\'article__nid\')).values(\'title\',\'cou\')
# 查询当前站点下所有分类对应的文章数
category_ret=models.Category.objects.all().filter(blog=blog).annotate(cou=Count(\'article__nid\')).values_list(\'title\',\'cou\',\'nid\')
print(category_ret)
# 查询当前站点下所有标签对应的文章数
tag_ret=models.Tag.objects.all().filter(blog=blog).annotate(cou=Count(\'article__nid\')).values_list(\'title\',\'cou\',\'nid\')
print(tag_ret)
#查询某年某月下对应的文章数
\'\'\'
from django.db.models.functions import TruncMonth
Sales.objects
.annotate(month=TruncMonth(\'timestamp\')) # Truncate to month and add to select list
.values(\'month\') # Group By month
.annotate(c=Count(\'id\')) # Select the count of the grouping
.values(\'month\', \'c\') # (might be redundant, haven\'t tested) select month and count
\'\'\'
year_ret=models.Article.objects.all().annotate(month=TruncMonth(\'create_time\')).values(\'month\').annotate(c=Count(\'nid\')).values_list(\'month\',\'c\')
关键点
:
- 主键可以直接缩写成
pk
- 关于annotate
- 只要是两个 model 类通过 ForeignKey 或者 ManyToMany 关联起来,那么就可以使用 annotate 方法来统计数量。
- annotate(字段名称=聚会函数)
- annotate 前面有values时候,主要是加快的查询的速度,values中必须要有annotate的依据
六.自定义文件夹存储路径
settings.py
#加这两句,以后再上传的图片,都放在media文件夹下
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
# MEDIA_ROOT = os.path.join(BASE_DIR, "app01")