• Python学习23


    django实例(环境、static、templates、路由、网页书籍类型选择、网页中间显示小说信息、ajax实现翻页)

    学习目标:

    python-django编写hj项目


    学习内容:

    1、设置环境和相关配置
    2、在static中放入相关的文件
    3、在templates中存放html文件
    4、路由的配置
    5、网页书籍类型选择
    6、中间显示小说信息
    7、在网页中利用ajax实现翻页刷新页面内容

    1、设置环境和相关配置

    1在django存放项目的目录下创建hj项目,在数据库中建好数据库,完成相关连接以及static和templates

    • 数据库

    在这里插入图片描述

    • hj项目
      在这里插入图片描述

    • 告知应用、连接数据库、引入static和templates时,在hj/hj/setting中的配置
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述


    2、在static中放入相关的文件

    • static文件夹除了在setting中配置,在html文件引用它的时候也需要声明
      在这里插入图片描述

    在head标签下

    <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    {% load static %}
    • 在具体需要引用到static文件的时候引用格式如下:
    ...
    <link rel="stylesheet" href="{% static 'hj/main.css'%}">
    <script src="{% static 'hj/hm.js.下载'%}"></script><script type="text/javascript" src="{% static 'hj/jquery.min.js.下载'%}"></script>
    <script type="text/javascript" src="{% static 'hj/common.js.下载'%}" charset="gbk"></script>
    <script type="text/javascript" src="{% static 'hj/baidu.js.下载'%}" charset="gbk"></script>
    ...

    3、在templates中存放html文件

    在这里插入图片描述


    4、路由的配置

    • 在项目urls下分发主路由
      在这里插入图片描述
    • 在应用下创建子路由文件urls
      在这里插入图片描述
    from django.conf.urls import url
    from django.urls import path, re_path
    from .views import *
    
    urlpatterns = [
        path('', hj_p1),
        url('class/(d+)/(d+)', books, name='books'),
        url('search', search, name='search'),
        url('chapter_info/(d+)', chapter_info, name='chapter_info'),
        url('show/(d+)/(d+)', show, name='show'),
    
    ]

    5、网页书籍类型选择

    1、实现书籍选择,点击黑色显示,如图:
    在这里插入图片描述

    2、在hj/views视图中添加hj_p1方法用来读取数据库中网页显示的书籍类型

    def hj_p1(request):
        pagedata = Books.objects.all()
        type_list = Book_type.objects.all()
        tid=1
        return render(request, 'hj_p1.html', locals())

    3、在网页hj_p1.html中接收views传来的数据,编写遍历数据并给出显示点击的方法

    <nav class="nav" id="nav">
    <div class="wrap clearfix">
    <ul>
        <li id="0"><a href="#">首页</a></li>
        {% for type in type_list%}
            {% if type.id == tid %}
                <li id="1" class="active"><a href="/class/{{type.id}}/1">{{type.tname}}</a></li>
                {% else %}
                    <li><a href="/class/{{type.id}}/1">{{type.tname}}</a></li>
            {% endif %}
        {% endfor %}
    </ul>
    </div>
    </nav>

    6、中间显示网页中间显示小说信息

    1、网页中间存在的内容
    在这里插入图片描述
    2、标题栏

    <table class="novel-table">
    <thead>
    <tr>
    <th>类别</th>
    <th>小说书名/最新章节</th>
    <th>总字数</th>
    <th>章节数</th>
    <th>作者</th>
    <th>更新时间</th>
    <th>状态</th>
    </tr>
    </thead>

    3、在标题栏下方展示内容

    <tbody>
    {% for book in pagedata %}
    <tr>
    <td><p class="p-class">{{ book.book_type.tname }}</p></td>
    <td class="align-left"><p class="p-name"><a href="/chapter_info/{{ book.id }}" target="_blank" class="a-bk_name">{{ book.bname }}</a><a href="#" target="_blank"> {{ book.new_chapter }}</a> </p></td>
    <td><p class="p-word">{{ book.wnum }}万字</p></td>
    <td><p class="p-chapter">{{ book.chapter_num }}章</p></td>
    <td><p class="p-author">{{ book.author }}</p></td>
    <td><p class="p-time">{{ book.update_date|date:'Y年m月d日' }}</p></td><td><p class="p-status go-on">{{ book.status }}</p></td>
    </tr>
    {% endfor %}
    </tbody>

    7、在网页中利用ajax实现翻页刷新页面内容

    1、当选择某一书籍类型页面展示出五个条目,然后可以实现翻页查看接下来的条目
    在这里插入图片描述
    在这里插入图片描述

    2、在views视图中,编写翻页的方法

    def books(request, tid, pid):
        tid = int(tid)
        pid = int(pid)
        book_type = Book_type.objects.get(id=tid)
        book_list = book_type.books_set.all()
        type_list = Book_type.objects.all()
    
        everyline = 5
        paginator = Paginator(book_list, everyline)
        pagecount = paginator.num_pages
        pagerange = paginator.page_range
        uppage = pid - 1
        if uppage < 1:
            uppage = 1
            pid = 1
    
        nextpage = pid + 1
        if nextpage > pagecount:
            nextpage = pagecount
            pid = pagecount
    
        pagedata = paginator.page(pid)
        if request.POST:
            book_lists = serializers.serialize('python', book_list, ensure_ascii=False)
            type_lists = serializers.serialize('python', type_list, ensure_ascii=False)
            pagedata = serializers.serialize('python', pagedata, ensure_ascii=False)
            dicts = {
                'pagedata': pagedata,
                'book_list': book_lists,
                'type_list': type_lists,
                'pagecount': pagecount,
                'uppage': uppage,
                'nextpage': nextpage,
                'pid': pid,
                'tid': tid,
                'book_type': book_type.tname
            }
    
            return JsonResponse(dicts)
        return render(request, 'hj_p1.html', locals())

    3、在网页hj_p1.html中编写翻页模块,并且利用ajax方法实现页面的内容刷新
    翻页模块:

     {% if search_status != 1 %}
    <div class="page">
        <input type="hidden" id="hup" value="{{ uppage }}">
        <input type="hidden" id="hdown" value="{{ nextpage }}">
    <a href="#"><span  id="first">首页</span></a>
        <a href="#"><span id="up">上一页</span></a>
    <a href="#"><span id="down">下一页</span></a>
    <a href="#" ><span id="last">尾页</span></a>
    共<span id="tiao">({{ pid }}/<span id="pagecount">{{ pagecount }}</span>)</span>页 转到
    # {{pagecount}}在含有id是pagecount的span标签中,是为了与后面ajax尾页翻页做联系
    
    <input name="toPage" id="toPage" value="2" type="text">页
    {% csrf_token %}
        <a><span id="tiaozhuan">跳转</span></a>
    </div>
    {% endif %}

    4、ajax根据id判断执行翻页操作

    <script src="{% static 'jquery.min.js.下载' %}"></script>
    <script>
    
    
        $("span").click(function(){
           #点击时间的绑定
         var page = $('#toPage').val().toString();
          if ($(this).attr('id') == 'first'){
              var page = 1
      }
          if ($(this).attr('id') == 'last'){
              var page = $('#pagecount').text()
      }
          if ($(this).attr('id') == 'up'){
              var page = $('#hup').val()
      }
          if ($(this).attr('id') == 'down'){
              var page = $('#hdown').val()
    
      }	
    	if(page.length != 0){
    
            $.ajax({
                type: 'post',
                url: page.toString(),
                data: {'ajax': '123'},
                headers: {"X-CSRFToken": '{{ csrf_token }}'},
                success: function (data) {
                    var strs = '<thead> <tr id="head1"> <th>类别</th><th>小说书名/最新章节</th> <th>总字数</th> <th>章节数</th> <th>作者</th> <th>更新时间</th> <th>状态</th> </tr> </thead>';
    
                    for (var book in data.pagedata) {
                        strs += '<tr><td><p class="p-class">' + data["book_type"] + '</p></td><td class="align-left"><p class="p-name"><a href="/chapter_info/' + data.pagedata[book]["fields"].id + '" target="_blank" class="a-bk_name">' + data.pagedata[book]["fields"].bname + '</a><a href="/show/' + data.pagedata[book].pk + '/' + data.pagedata[book]["fields"].chapter_num + '" target="_blank"> ' + data.pagedata[book]["fields"].new_chapter + '</a> </p></td> <td><p class="p-word">' + data.pagedata[book]["fields"].wnum + '万字</p></td> <td><p class="p-chapter">' + data.pagedata[book]["fields"].chapter_num + '章</p></td> <td><p class="p-author">' + data.pagedata[book]["fields"].author + '</p></td> <td><p class="p-time">' + data.pagedata[book]["fields"].update_date + '</p></td> <td><p class="p-status go-on">' + data.pagedata[book]["fields"].status + '</p></td></tr>'
                    }
    
                    $(".novel-table").html(strs);
                    // 含有.novel-table的标签,替换为html(strs拼接的内容),此id在table标签里,ajax会根据strs替换掉table标签中的内容
                    $("#tiao").html('('+data["pid"].toString() + '/' + '<span id="pagecount">'+data["pagecount"].toString()+'</span>)');
                    //id是tiao的标签,替换成html里面的跳转链接
                    $('#hup').val(data['uppage'])
                    //点击上一页判断为up,锁定到id是hup,根据value值进行跳转
                    $('#hdown').val(data['nextpage'])
                    //点击下一页判断为down,锁定到id是hdown,根据value值进行跳转
                }
            })
    }
     })
    
    </script>

    4、一般方法结合上面的页面显示内容的版块,即可实现页面的跳转

        {% if search_status != 1 %}
        <div class="page">
            <a href="/class/{{tid}}/1"><span>首页</span></a>
            <a href="/class/{{tid}}/{{uppage}}"><span>上一页</span></a>
            <a href="/class/{{tid}}/{{nextpage}}"><span>下一页</span></a>
            <a href="/class/{{tid}}/{{pagecount}}"><span>尾页</span></a>
            共<span id="tiao">({{ pid }}/<span id="pagecount">{{ pagecount }}</span>)</span>页 转到
        <input name="toPage" id="toPage" value="1" type="text" >页
    {#{% csrf_token %}#}
        <a><span id="tiaozhuan">跳转</span></a>
    </div>
    {% endif %}
  • 相关阅读:
    Apache中Cookie长度的设置 414 request-uri too large apache
    URL中文参数,JSON转换,PHP赋值JS
    PHP通过JSON给JS赋值;JS通过JSON给PHP传值
    PHP限制上传文件大小
    PHP 类中使用全局变量和全局常量
    利用span设置文字固定宽度
    Linux用户管理
    DropZone(文件上传插件)
    rest_framework基础
    RESTful规范
  • 原文地址:https://www.cnblogs.com/tangmf/p/14331195.html
Copyright © 2020-2023  润新知