个人页面展示
个人页面展示:
django后台管理:
后台管理:
django admin 后台管理
xadmin 组件(有bug)--》公司
-->添加用户数据,修改数据,删除数据
如何用:
1.在应用中的admin.py注册要管理的表(模型类)
from app01 import models
admin.site.register(models.xxx) # xx : 表名(类)
2.登录后台管理---》超级用户(root权限)
createsuperuser
注意: admin会自动给所有的注册了的模型表 加一个s后缀
admin特性: admin会自动给注册了的模型表自动生成增删改查四条url
eg: http://127.0.0.1:8000/admin/app01/userinfo/ 查
http://127.0.0.1:8000/admin/app01/userinfo/3/change/ 改http://127.0.0.1:8000/admin/app01/userinfo/3/delete/ 删
http://127.0.0.1:8000/admin/app01/userinfo/add/ 增
admin数据录入的顺序:(以外键多的切入)
路由分发本质:
路由分发本质:
url(r'^index/',([
url(r'^index_1/',([
url(r'^index_1_1/',([
],None,None))
@property #源码
def urls(self):
return self.get_urls(), 'admin', self.name
r'^index_1_1/', None,None
数据暴露:
数据暴露:
前端想要后端服务器上文件的数据,就必须要后端开一个接口,要手动开设后端资源,但是也将该文件夹下所有的文件都暴露了(***)
# eg: 谨慎使用
1. url(r'^app01/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT})
# 2. settings内设置 :
MEDIA_ROOT = os.path.join(BASE_DIR,'app01')
# media配置 能够将用户上传的所有的文件都统一指定的文件夹下
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
文件上传:
用户文件上传文件:
1.settings内配置:
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
media配置 能够将用户上传的所有的文件都统一指定的文件夹下
2.应用文件自动创建media文件夹,并把之前创建的avatar文件夹放入media文件夹下
https://shazhenyu.blog.csdn.net/article/details/83104653
python处理excel文件(优良博客)
站点样式:
#个人站点样式展示:
from django.db.models.functions import TruncMonth
def site(request,username,**kwargs):
user_obj = models.Userinfo.objects.filter(username=username).first()
blog = user_obj.blog
if not user_obj: # 404页面
return render(request,'error.html')
# 有当前用户所有的文章
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)
# 1.查询当前用户每一个分类及分类下的文章数
category_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')
# 2.查询当前用户每一个标签级标签下的文章数
tag_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')
# 3.按照年月分组
date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values('month').annotate(num=Count('pk')).values_list('month','num')
return render(request,'site.html',locals())
# site.html
--->html页面展示:
<div class="col-md-3">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">文章分类</h3>
</div>
<div class="panel-body">
{% for category in category_list %}
<p><a href="/{{ username }}/category/{{ category.2 }}/">{{ category.0 }}({{ category.1 }})</a></p>
{% endfor %}
</div>
</div>
<div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">文章标签</h3>
</div>
<div class="panel-body">
{% for tag in tag_list %}
<p><a href="/{{ username }}/tag/{{ tag.2 }}/">{{ tag.0 }}({{ tag.1 }})</a></p>
{% endfor %}
</div>
</div>
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title">日期归档</h3>
</div>
<div class="panel-body">
{% for date in date_list %}
<p><a href="/{{ username }}/archive/{{ date.0|date:'Y-m' }}/">{{ date.0|date:'Y年m月' }}({{ date.1 }})</a></p>
{% endfor %}
</div>
</div>
</div>
<div class="col-md-9">
{% for article in article_list %}
<div class="media">
<h4 class="media-heading"><a href="#">{{ article.title }}</a></h4>
<div class="media-left media-middle">
<a href="#">
<img class="media-object" src="/media/{{ article.blog.userinfo.avatar }}/" alt="..." height="60">
</a>
</div>
<div class="media-body">
{{ article.desc }}
</div>
<br>
<div class="pull-right">
<span>posted </span>
<span>@ </span>
<span>{{ article.create_time|date:'Y-m-d' }} </span>
<span>{{ article.blog.userinfo.username }} </span>
<span><span class="glyphicon glyphicon-comment"></span>评论数({{ article.comment_num }}) </span>
<span><span class="glyphicon glyphicon-thumbs-up"></span>点赞数({{ article.up_num }})</span>
<span><a href="#">编辑</a></span>
</div>
</div>
<hr>
{% endfor %}
</div>
</div>
</div>