登陆功能
bbs首页搭建
admin后台管理
首页文章展示
用户头像展示(media配置)
图片防盗链
个人站点页面搭建
侧边栏展示功能
侧边栏筛选功能
将侧边栏制作成inclusion_tag
登陆功能
def login (request ):
if request.method == 'POST' :
back_dic = {'code' :1000 ,'msg' :'' }
username = request.POST.get('username' )
password = request.POST.get('password' )
code = request.POST.get('code' )
if request.session.get('code' ).upper() == code.upper():
user_obj = auth.authenticate(request,username=username,password=password)
if user_obj:
auth.login(request,user_obj)
back_dic['url' ] = '/home/'
else :
back_dic['code' ] = 2000
back_dic['msg' ] = '用户名或密码错误'
else :
back_dic['code' ] = 3000
back_dic['msg' ] = '验证码错误'
return JsonResponse(back_dic)
return render(request,'login.html' )
首页搭建
{% if request.user.is_authenticated %}
<li><a href="#" >{{ request.user.username }}</a></li>
<li class ="dropdown" >
<a href="#" class ="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" >更多操作 <span class ="caret" ></span></a>
<ul class ="dropdown-menu" >
<li><a href="#" >修改密码</a></li>
<li><a href="#" >修改头像</a></li>
<li><a href="#" >后台管理</a></li>
<li role="separator" class ="divider" ></li>
<li><a href="#" >退出登陆</a></li>
</ul>
</li>
{% else %}
<li><a href="{% url 'reg' %}" >注册</a></li>
<li><a href="{% url 'login' %}" >登陆</a></li>
{% endif %}
admin后台管理
"""
django给你提供了一个可视化的界面用来让你方便的对你的模型表
进行数据的增删改查操作
如果你先想要使用amdin后台管理操作模型表
你需要先注册你的模型表告诉admin你需要操作哪些表
去你的应用下的admin.py中注册你的模型表
from django.contrib import admin
from app01 import models
# Register your models here.
admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
admin.site.register(models.Article)
admin.site.register(models.Article2Tag)
admin.site.register(models.UpAndDown)
admin.site.register(models.Comment)
"""
http://127.0 .0 .1 :8000 /admin/app01/userinfo/ 查
http://127.0 .0 .1 :8000 /admin/app01/userinfo/add/ 增
http://127.0 .0 .1 :8000 /admin/app01/userinfo/1 /change/ 改
http://127.0 .0 .1 :8000 /admin/app01/userinfo/1 /delete/ 删
http://127.0 .0 .1 :8000 /admin/app01/blog/ 查
http://127.0 .0 .1 :8000 /admin/app01/blog/add/ 增
http://127.0 .0 .1 :8000 /admin/app01/blog/1 /change/ 改
http://127.0 .0 .1 :8000 /admin/app01/blog/1 /delete/ 删
"""
关键点就在于urls.py中的第一条自带的url
前期我们需要自己手动苦逼的录入数据,自己克服一下
"""
千万不要把别人的文章绑定标签
用户头像展示
"""
1 网址所使用的静态文件默认放在static文件夹下
2 用户上传的静态文件也应该单独放在media文件夹下
media配置
该配置可以让用户上传的所有文件都固定存放在某一个指定的文件夹下
# 配置用户上传的文件存储位置
MEDIA_ROOT = os.path.join(BASE_DIR,'media') # 文件名 随你 自己
会自动创建多级目录
如何开设后端指定文件夹资源
首先你需要自己去urls.py书写固定的代码
from django.views.static import serve
from BBS14 import settings
# 暴露后端指定文件夹资源
url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT})
"""
图片防盗链
我可以做到请求来的时候先看看当前请求是从哪个网站过来的
如果是本网站那么正常访问
如果是其他网站直接拒绝
请求头里面有一个专门记录请求来自于哪个网址的参数
Referer: http://127.0 .0 .1 :8000 /xxx/
1. 要么修改请求头referer
2. 直接写爬虫把对方网址的所有资源直接下载到我们自己的服务器上
个人站点
<link rel="stylesheet" href="/media/css/{{ blog.site_theme }}/" >
id content create_time month
1 111 2020 -11 -11 2020 -11
2 222 2020 -11 -12 2020 -11
3 333 2020 -11 -13 2020 -11
4 444 2020 -11 -14 2020 -11
5 555 2020 -11 -15 2020 -11
"""
django官网提供的一个orm语法
from django.db.models.functions import TruncMonth
-官方提供
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
时区问题报错
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
"""
侧边栏筛选功能
https://www.cnblogs.com/jason/tag/Python/ 标签
https://www.cnblogs.com/jason/category/850028. html 分类
https://www.cnblogs.com/jason/archive/2016 /10. html 日期
https://www.cnblogs.com/jason/tag/1 / 标签
https://www.cnblogs.com/jason/category/1 分类
https://www.cnblogs.com/jason/archive/2020 -11 / 日期
url(r'^(?P<username>\w+)/
(?P<condition>category|tag|archive)/(?P<param>.*)/' ,views.site)
def site (request,username,**kwargs ):
"""
:param request:
:param username:
:param kwargs: 如果该参数有值 也就意味着需要对article_list做额外的筛选操作
:return:
"""
user_obj = models.UserInfo.objects.filter (username=username).first()
if not user_obj:
return render(request,'errors.html' )
blog = user_obj.blog
article_list = models.Article.objects.filter (blog=blog)
if kwargs:
condition = kwargs.get('condition' )
param = kwargs.get('param' )
if condition == 'category' :
article_list = article_list.filter (category_id=param)
elif condition == 'tag' :
article_list = article_list.filter (tags__id=param)
else :
year,month = param.split('-' )
article_list = article_list.filter (create_time__year=year,create_time__month=month)
category_list = models.Category.objects.filter (blog=blog).annotate(count_num=Count('article__pk' )).values_list('name' ,'count_num' ,'pk' )
tag_list = models.Tag.objects.filter (blog=blog).annotate(count_num=Count('article__pk' )).values_list('name' ,'count_num' ,'pk' )
date_list = models.Article.objects.filter (blog=blog).annotate(month=TruncMonth('create_time' )).values('month' ).annotate(count_num=Count('pk' )).values_list('month' ,'count_num' )
return render(request,'site.html' ,locals ())
1 url : 拼接 **kwargs 对条件进行判断,筛选数据
2 TruncMonth from django.db.models.functions import TruncMonth
3 暴露后端资源:
配置文件settings:
MEDIA_ROOT = os.path.join(BASE_DIR,'...' )
from django.views.static import serve
from tables import settings
url(r'^media/(?<path>.*),serve,{' document_root':settings.MEDIA_ROOT}) # 暴露后端指定文件夹资源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现