• DAY 60 django15


    1 注册
    2 登录
    3 验证码生成
    4 验证码刷新
    5 首页布局

    1 首页布局

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>首页</title>
       <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
       <link rel="stylesheet" href="/static/font-awesome-4.7.0/css/font-awesome.min.css">
       <script src="/static/jquery-3.3.1.js"></script>
       <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
       <style>
           .article_footer{
               margin-right: 10px;
          }
       </style>
    </head>
    <body>
    <div class="head">
       <nav class="navbar navbar-default">
           <div class="container-fluid">
               <!-- Brand and toggle get grouped for better mobile display -->
               <div class="navbar-header">
                   <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                           data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                       <span class="sr-only">Toggle navigation</span>
                       <span class="icon-bar"></span>
                       <span class="icon-bar"></span>
                       <span class="icon-bar"></span>
                   </button>
                   <a class="navbar-brand" href="#">博客园</a>
               </div>

               <!-- Collect the nav links, forms, and other content for toggling -->
               <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                   <ul class="nav navbar-nav">
                       <li class="active"><a href="#">首页 <span class="sr-only">(current)</span></a></li>
                       <li><a href="#">文章</a></li>

                   </ul>
                  {% if request.user.is_authenticated %}
                       <ul class="nav navbar-nav navbar-right">
                           <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="/logout/">退出</a></li>
                               </ul>
                           </li>
                       </ul>
                  {% else %}
                       <ul class="nav navbar-nav navbar-right">
                           <li><a href="/login/">登录</a></li>
                           <li><a href="/register/">注册</a></li>
                       </ul>
                  {% endif %}

               </div><!-- /.navbar-collapse -->
           </div><!-- /.container-fluid -->
       </nav>
    </div>
    <div class="container-fluid">


       <div class="row">
           <div class="col-md-2">
               <div class="panel panel-success">
                   <div class="panel-heading">
                       <h3 class="panel-title">广告位招租</h3>
                   </div>
                   <div class="panel-body">
                      重金求子:<a href="">点我看美女</a>
                   </div>
               </div>
               <div class="panel panel-info">
                   <div class="panel-heading">
                       <h3 class="panel-title">老刘说书</h3>
                   </div>
                   <div class="panel-body">
                       <ul class="list-group">
                           <li class="list-group-item">红楼梦</li>
                           <li class="list-group-item">西游记</li>
                           <li class="list-group-item">洪流吗</li>

                       </ul>
                   </div>
               </div>

           </div>
           <div class="col-md-7">
               <div>

                   <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">


                       <ol class="carousel-indicators">
                           <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
                           <li data-target="#carousel-example-generic" data-slide-to="1"></li>
                           <li data-target="#carousel-example-generic" data-slide-to="2"></li>
                       </ol>
                       <div class="carousel-inner" role="listbox">

                          {% for banner in banner_list %}
                              {% if forloop.first %}
                                   <div class="item active">
                                       <img src="{{ banner.url }}" alt="...">
                                       <div class="carousel-caption">
                                          {{ banner.name }}
                                       </div>
                                   </div>
                              {% else %}
                                   <div class="item">
                                       <img src="{{ banner.url }}" alt="...">
                                       <div class="carousel-caption">
                                          {{ banner.name }}
                                       </div>
                                   </div>
                              {% endif %}
                          {% endfor %}



                           <a class="left carousel-control" href="#carousel-example-generic" role="button"
                              data-slide="prev">
                               <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
                               <span class="sr-only">Previous</span>
                           </a>
                           <a class="right carousel-control" href="#carousel-example-generic" role="button"
                              data-slide="next">
                               <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
                               <span class="sr-only">Next</span>
                           </a>

                       </div>

                   </div>


               </div>

               <div class="article" style="margin-top: 20px">
                  {% for article in article_list %}
                       <div>
                           <h4 class="media-heading"><a href="">{{ article.title }}</a></h4>
                           <div class="media">
                               <div class="media-left media-middle">
                                   <a href="#">
    {#                                    <img class="media-object" src="media/{{ article.blog.userinfo.avatar }}" alt="..." height="60px" width="60px">#}
                                       <img class="media-object" src="https://pic.cnblogs.com/face/1921007/20200116181302.png" height="60px" width="60px">
                                   </a>
                               </div>
                               <div class="media-body">
                                  {{ article.desc }}

                               </div>
                               <div style="margin-top: 10px">
                                   <span class="article_footer"><a href="">{{ article.blog.userinfo.username }}</a></span>
                                   <span class="article_footer">{{ article.create_time|date:'Y-m-d H:i:s' }}</span>
    {#                                <span class="glyphicon glyphicon-thumbs-up article_footer">&nbsp;{{ article.up_num }}</span>#}
                                   <span class="article_footer"><i class="fa fa-comment-o fa-lg"></i>&nbsp;{{ article.up_num }}</span>
                                   <span class="article_footer"><i class="fa fa-home fa-lg"></i>&nbsp;{{ article.down_num }}</span>
                                   <span class='article_footer'><i class="fa fa-frown-o fa-lg"></i>&nbsp;{{ article.commit_num }}</span>
                               </div>
                           </div>
                           <hr>
                       </div>
                  {% endfor %}


               </div>
           </div>

           <div class="col-md-3">

               <div class="panel panel-success">
                   <div class="panel-heading">
                       <h3 class="panel-title">广告位招租</h3>
                   </div>
                   <div class="panel-body">
                      重金求子:<a href="">点我看美女</a>
                   </div>
               </div>
               <div class="panel panel-info">
                   <div class="panel-heading">
                       <h3 class="panel-title">老刘说书</h3>
                   </div>
                   <div class="panel-body">
                       <ul class="list-group">
                           <li class="list-group-item">金瓶没</li>
                           <li class="list-group-item">西游记</li>
                           <li class="list-group-item">洪流吗</li>

                       </ul>
                   </div>
               </div>


           </div>
       </div>
    </div>

    </body>
    </html>



     

    2 个人头像显示

    1 开启media
    -配置文件
       MEDIA_ROOT=os.path.join(BASE_DIR,'media')
       -路由
        re_path('^media/(?P<path>.*?)$', serve,kwargs={'document_root':settings.MEDIA_ROOT}),
       -前端:
       <img class="media-object" src="media/{{ article.blog.userinfo.avatar }}" alt="..." height="60px" width="60px">
       

     

    3 个人站点路由设计

    1 路由一定要放在最后
       re_path('^(?P<username>w+)$', views.personal_site),

     

    4 个人站点页面设计

    base.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>
          {% block title %}

          {% endblock %}
       </title>
       <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
       <link rel="stylesheet" href="/static/font-awesome-4.7.0/css/font-awesome.min.css">
       <script src="/static/jquery-3.3.1.js"></script>
       <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
      {% block js %}

      {% endblock %}
    </head>
    <body>

    <div class="head" style="margin-bottom: 10px">

       <div style="height: 120px; color: rgb(152, 26, 26);">>
           <div class="row">
               <div class="col-md-2" style="font-size: 30px;color: white;margin: 20px">
                  {% block site_name %}

                  {% endblock %}
               </div>
           </div>
           <div class="row">
               <div class="pull-right" style="margin-right: 20px">
                   <span><a href="">后台管理</a></span>
                   <span>首页</span>
                   <span>订阅</span>
               </div>
           </div>
       </div>
    </div>
    <div class="container-fluid">
       <div class="row">
          {% block left %}

          {% endblock %}
          {% block main %}

          {% endblock %}

       </div>
    </div>

    </body>
    </html>

    site.html

    {% extends 'base.html' %}

    {% block title %}
      {{ user.username }}-博客园
    {% endblock %}

    {% block site_name %}
      {{ user.blog.site_name }}
    {% endblock %}

    {% block left %}
       <div class="col-md-2">
           <div class="panel panel-success">
               <div class="panel-heading">
                   <h3 class="panel-title">我的标签</h3>
               </div>
               <div class="panel-body">
                  {% for tag in tag_list %}
                       <p><a href="">{{ tag.1 }}({{ tag.0 }})</a></p>
                  {% endfor %}


               </div>
           </div>
           <div class="panel panel-info">
               <div class="panel-heading">
                   <h3 class="panel-title">我的分类</h3>
               </div>
               <div class="panel-body">
                  {% for category in category_list %}
                       <p><a href="">{{ category.name }}({{ category.count }})</a></p>
                  {% endfor %}
               </div>
           </div>
           <div class="panel panel-info">
               <div class="panel-heading">
                   <h3 class="panel-title">随笔档案</h3>
               </div>
               <div class="panel-body">
                  {% for month in month_list %}

                       <p><a href="">{{ month.0|date:'Y年m月' }}({{ month.1 }})</a></p>
                  {% endfor %}

               </div>
           </div>
       </div>
    {% endblock %}

    {% block main %}
       <div class="col-md-10">
           <div class="article" style="margin-top: 20px">
              {% for article in article_list %}
                   <div>
                       <h4 class="media-heading"><a href="">{{ article.title }}</a></h4>
                       <div class="media">
                           <div class="media-body">
                              {{ article.desc }}

                           </div>
                           <div style="margin-top: 10px" class="pull-right">
                               <span class="article_footer">posted @</span>
                               <span class="article_footer">{{ article.create_time|date:'Y-m-d H:i:s' }}</span>
                              {#                               <span class="glyphicon glyphicon-thumbs-up article_footer">&nbsp;{{ article.up_num }}</span>#}
                               <span class="article_footer"><i
                                       class="fa fa-comment-o fa-lg"></i>&nbsp;{{ article.up_num }}</span>
                               <span class="article_footer"><i
                                       class="fa fa-home fa-lg"></i>&nbsp;{{ article.down_num }}</span>
                               <span class='article_footer'><i
                                       class="fa fa-frown-o fa-lg"></i>&nbsp;{{ article.commit_num }}</span>
                           </div>
                       </div>
                       <hr>
                   </div>
              {% endfor %}


           </div>

       </div>
    {% endblock %}

     

    5 左侧过滤功能

    # 查询当前站点下某年某月的文章数(分组依据,日期:年月),不需要连表
    from django.db.models.functions import TruncMonth, TruncDay, TruncYear, TruncHour
    '''
    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
    '''


    id   name         create_time        month
    1    xx          2020-09-18:xxx      2020-09
    2    xx44        2020-09-18:xxx      2020-09
       
    3    xx44        2020-08-18:xxx      2020-08

     

    from django.db.models import Count
    def personal_site(request, username):
       user = models.UserInfo.objects.filter(username=username).first()
       if user:
           article_list = user.blog.article_set.all()
           # category_list = user.blog.category_set.all()
           # tag_list = user.blog.tag_set.all()
           # category_list=user.blog.category_set.all()

           # 查询每个分类下的文章数和分类名称
           # category_list=models.Category.objects.values('id').annotate(count=Count('article')).values('count','name')
           # print(category_list)

           # 查询当前这个站点下的分类及分类下的文章数
           category_list = models.Category.objects.filter(blog=user.blog).annotate(count=Count('article')).values('count', 'name')
           # category_list = models.Category.objects.filter(blog=user.blog).annotate(count=Count('article')).values_list('count', 'name')
           print(category_list)

           #查询当前站点下所有的标签及标签下的文章数

           # tag_list=models.Tag.objects.filter(blog=user.blog).annotate(count=Count('article')).values('count', 'name')
           tag_list=models.Tag.objects.filter(blog=user.blog).annotate(count=Count('article')).values_list('count', 'name')
           print(tag_list)

           # 查询当前站点下按月分组的文章数和年份月份
           '''
          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
          '''
           from django.db.models.functions import TruncMonth,TruncYear  # 按月截断
           month_list=models.Article.objects.filter(blog=user.blog).annotate(month=TruncMonth('create_time')).values('month').annotate(count=Count('id')).values_list('month','count')
           print(month_list)
           return render(request, 'site.html', locals())
       else:
           return render(request, '404.html')

     

    补充

    1 图片防盗链
    -通过referer限制
    -在nginx上限制(代码不用限制)
    -nginx不配置,代码中多加一层,中间件
  • 相关阅读:
    Master公式计算递归时间复杂度
    对数器的使用
    HTML翻转菜单练习
    剑指offer题目解答合集(C++版)
    HTML---仿网易新闻登录页
    两个有序数组中的中位数以及求第k个最小数的值
    算法之重建二叉树
    AFNetWorking 上传功能使用及源码分析
    图片Alpha预乘的作用[转]
    C#/.NET 学习之路——从入门到放弃
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14893690.html
Copyright © 2020-2023  润新知