程序目录

urls.py

"""s14_day21 URL Configuration
"""
from django.contrib import admin
from django.conf.urls import url,include
from app01 import views
urlpatterns = [
    # url(r'admin/', admin.site.urls),
    # url(r'index/',views.index),
    # url(r'index/',views.index,{'name':"root"}),

    url(r'^a/', include('app01.urls', namespace='author_1')),
    # url(r'^b/', include('app01.urls', namespace='publisher-polls')),
    #

    url(r'tpl1', views.tpl_1),
    url(r'^tpl2', views.tpl_2),
    url(r'^tpl3', views.tpl_3),

    url(r'tpl4', views.tpl_4),
    url(r'user_lis/',views.user_lis),
    url(r'login/',views.login),
    url(r'index/',views.index),
    url(r'order/',views.Order.as_view()),
]

app01-->urls.py

"""s14_day21 URL Configuration
"""
from django.contrib import admin
from django.conf.urls import url
from app01 import views
app_name='app01'
urlpatterns = [
    url(r'^indexx/',views.indexx, name='indexxy'),
]

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

STATIC_URL = '/static/'
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,'static'),
)

app01-->views.py

from django.shortcuts import render,HttpResponse,redirect
from django.urls import reverse
# Create your views here.
def indexx(request):
    # print(name)
    v= reverse('author_1:indexxy')
    print(v)
    # from django.core.handlers.wsgi import WSGIRequest
    # print(type(request))

    # environ封装了所有用户请求信息
    # print(request.environ)
    # for k,v in request.environ.items():
    #     print(k,':',v)
    # request.POST
    # request.GET
    # request.COOKIES
    # print(request.environ['HTTP_USER_AGENT'])
    return HttpResponse('ok')

def tpl_2(request):
    name='root'
    return render(request,'tpl2.html',{'name':name})

def tpl_3(request):
    status="已删除"
    return render(request,'tpl3.html',{'status':status})

def tpl_1(request):
    user_li=[1,2,3,4]
    name = 'tpl_1'
    return render(request,'tpl1.html',{'u':user_li})

def tpl_4(request):
    name="TYGHijghjj112"
    return render(request,'tpl4.html',{'name':name})

li=[]
for i in range(1009):
    li.append(i)
from utils.pagetion import Page
def user_lis(request):
    current_page=request.GET.get('p',1)
    current_page=int(current_page)

    val=request.COOKIES.get('per_page_count',10)
    val=int(val)

    Page_obj=Page(current_page,len(li),val)
    data=li[Page_obj.start:Page_obj.end]
    page_str=Page_obj.page_str("/user_lis/")
    return render(request,'user_lis.html',{'li':data,'page_str':page_str})

########################## cookie ###########################
user_info_2={
    'dachengzi':{'pwd':'123123'},
    "kangbazi":{'pwd':'kkkkkk'},
}
def login(request):
    if request.method =="GET":
        return render(request,'login.html')

    if request.method =="POST":
        u=request.POST.get('username')
        p=request.POST.get('pwd')
        dic=user_info_2.get(u)
        if not dic:
            return render(request,'login.html')
        if dic['pwd']==p:
            res=redirect('/index/')
            res.set_cookie('username111',u)
            res.set_cookie('user_type','asdsdd',httponly=True)

            # import datetime
            # current_date = datetime.datetime.utcnow()
            # current_date=current_date+datetime.timedelta(seconds=5)
            # res.set_cookie('username111', u, expires=current_date)

            return res
        else:
            return render(request, 'login.html')

def auth(func):
    def inner(request,*args,**kwargs):
        v=request.COOKIES.get('username111')
        if not v:
            return redirect('/login/')
        return  func(request,*args,**kwargs)
    return inner
@auth
def index(request):
    #获取当前已经登录的用户
    v=request.COOKIES.get('username111')
    return render(request,'index.html',{'current_user':v})

from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name='dispatch')  #对Order类里的dispatch方法进行装饰auth
class Order(views.View):
    # @method_decorator(auth)
    # def dispatch(self, request, *args, **kwargs):
    #     return super(Order,self).dispatch(request,*args,**kwargs)

    # @method_decorator(auth)
    def get(self,request):
        v = request.COOKIES.get('username111')
        return render(request, 'index.html', {'current_user': v})

    def post(self,request):
        v = request.COOKIES.get('username111')
        return render(request, 'index.html', {'current_user': v})

def order(request):
    #获取当前已经登录的用户
    v=request.COOKIES.get('username111')
    return render(request,'index.html',{'current_user':v})

def cookie(request):
    #字典
    request.COOKIES['username111']
    request.COOKIES.get('username111')

    response=render(request,'index.html')
    response=redirect('/index/')
    #设置cookie,关闭浏览器cookie就失效
    response.set_cookie('key','value')

    # 设置cookie,10秒后cookie就失效
    response.set_cookie('username111', 'value', max_age=10)

    # 设置cookie,到哪个时间节点失效
    import datetime
    current_date = datetime.datetime.utcnow()
    current_date = current_date + datetime.timedelta(seconds=5)
    response.set_cookie('username111', 'value', expires=current_date)

    import datetime
    current_date=datetime.datetime.utcnow()

    # 获取cookie
    request.COOKIES.get('....')

    # 设置cookie
    response.set_cookie("...")

    obj=HttpResponse('s')
    obj.set_signed_cookie('username','kbz',salt='aaassdf')
    request.get_signed_cookie('username',salt='aaassdf')

    return response

templates-->master.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="/static/commons.css">
    <style>
        .pg-header{
            height:48px;
            background-color: seashell;
            color:green;
        }
    </style>
    {% block css %}{% endblock %}
</head>
<body>
    <div class="pg-header">管理</div>

    {% block content %}{% endblock %}

    <script src="/static/jquery.js"></script>
    {% block js %}{% endblock %}
</body>
</html>

tempaltes-->tag.html

<div style="color: red">{{ name }}</div>
<div dd_name="尾品汇_列表_即将结束 " class="list_con">

    <ul class="list_aa clearfix">
        <li class="">

            <a dd_name="all|21671|625|1" href="http://v.dangdang.com/pn21671_625_1.html" target="_blank" class="img"
               title="迪士尼宝宝年货节">

                <img data-original="http://img54.ddimg.cn/216710039996594_y.jpg"
                     src="http://img54.ddimg.cn/216710039996594_y.jpg" alt="迪士尼宝宝年货节" width="350" height="260"
                     style="display: inline;">

                <span class="sale_time">
                                                                    <span overtype="5" js="true" action="countdown"
                                                                          type="seckill" class="time"
                                                                          endvalue="1577757600" showtype="3"><span
                                                                            sec="sep">还剩<span>191</span>天</span></span>

                                <span class="sale"></span>
                            </span>
                <span class="red_circle" style="display: none;"></span>
                <span class="little_logo">
                                                                    <img data-original="http://img56.ddimg.cn/216710039996596_y.jpg"
                                                                         src="http://img56.ddimg.cn/216710039996596_y.jpg"
                                                                         width="115" height="40"
                                                                         style="display: inline;">
                                                            </span>
                <span class="price_s">
                                1.4<span>折起</span>                            </span>
            </a>
        </li>
    </ul>
</div>

tpl1.html

{% extends 'master.html' %}

{% block title %}用户管理{% endblock %}

{% block content %}
    <h1>用户管理</h1>
    <ul>
        {% for i in u %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>

    {% for i in u %}
    {% include "tag.html" %}
    {% endfor %}

{% endblock %}

{% block css %}
    <style>
        body{
            background-color: green;
        }
    </style>
{% endblock %}

{% block js %}
    <script></script>
{% endblock %}

static-->commons.css

body{
    margin: 0;
}

tpl2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/commons.css">
    <style>
        .pg-header{
            height:48px;
            background-color: seashell;
            color:green;
        }
    </style>
</head>
<body>
    <div class="pg-header">管理</div>
    <h1>修改密码{{ name }}</h1>
    <script src="/static/jquery.js"></script>
</body>
</html>

tpl3.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/commons.css">
    <style>
        .pg-header{
            height:48px;
            background-color: seashell;
            color:green;
        }
    </style>
</head>
<body>
    <div class="pg-header">管理</div>
    <h3>{{ status }}</h3>
    <script src="/static/jquery.js"></script>
</body>
</html>

templatetags-->xxoo.py

from django import template
from django.utils.safestring import  mark_safe

register=template.Library()

@register.simple_tag
def hou(a1,a2):
    return a1+a2

@register.filter()
def jz(a1,a2):
    return a1+a2  #str(数字)

templates-->tpl4.html

{% load xxoo %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
   <div>{{ name }}</div>
   <div>{{ name|lower }}</div>
   {{ name|truncatewords:"30" }}

    {% hou 2 9  %}

    {{ "maliya" | jz:"LSS" }}

    <script src="/static/jquery-1.12.4.js"></script>
     {% if "maliya"|jz:"LSS" %}
        alert(123)
    {% endif %}
</body>
</html>

views.py.bak

from django.shortcuts import render,HttpResponse,redirect
from django.urls import reverse
# Create your views here.
def index(request):
    # print(name)
    v= reverse('author:index')
    print(v)
    from django.core.handlers.wsgi import WSGIRequest
    # print(type(request))

    # environ封装了所有用户请求信息
    # print(request.environ)
    # for k,v in request.environ.items():
    #     print(k,':',v)
    # request.POST
    # request.GET
    # request.COOKIES
    print(request.environ['HTTP_USER_AGENT'])
    return HttpResponse('ok')

def tpl_2(request):
    name='root'
    return render(request,'tpl2.html',{'name':name})

def tpl_3(request):
    status="已删除"
    return render(request,'tpl3.html',{'status':status})

def tpl_1(request):
    user_li=[1,2,3,4]
    name = 'tpl_1'
    return render(request,'tpl1.html',{'u':user_li})

def tpl_4(request):
    name="TYGHijghjj112"
    return render(request,'tpl4.html',{'name':name})

li=[]
for i in range(1009):
    li.append(i)
def user_lis(request):
    # data=li[0:10]
    # data = li[10:20]
    current_page=request.GET.get('p',1)
    current_page=int(current_page)

    per_page_count=10
    pager_num = 11

    start=(current_page-1)*per_page_count
    end=current_page * per_page_count
    data=li[start:end]
    from django.utils.safestring import mark_safe

    all_count = len(li)
    total_count,y=divmod(all_count,per_page_count)
    if y:
        total_count+=1

    page_list=[]
    # start_index=1
    # end_index=count+1
    # start_index = current_page -5
    # end_index = current_page +6

    if total_count<pager_num:
        start_index=1
        end_index=total_count+1
    else:
        if current_page<=(pager_num+1)/2:
            start_index=1
            end_index=pager_num+1
        else:
            start_index=current_page -(pager_num-1)/2
            end_index=current_page +(pager_num+1)/2
            if (current_page+(pager_num-1)/2)>total_count:
                end_index=total_count +1
                start_index=total_count -pager_num +1

    if current_page==1:
        prev="<a class='page' href='#'>上一页</a>"
    else:
        prev="<a class='page' href='/user_lis/?p=%s'>上一页</a>"%(current_page-1,)
    page_list.append(prev)

    for i in range(int(start_index),int(end_index)):
        if i == current_page:
            temp="<a class='page active' href='/user_lis/?p=%s'>%s</a>"%(i,i)
        else:
            temp = "<a class='page' href='/user_lis/?p=%s'>%s</a>"%(i,i)
        page_list.append(temp)

    if current_page==total_count:
        nex = "<a class='page' href='javascript:void(0);'>下一页</a>"
    else:
        nex = "<a class='page' href='/user_lis/?p=%s'>下一页</a>" % (current_page + 1,)
    page_list.append(nex)

    jump="""
    <input type="text" /><a onclick="jumpTo(this, '/user_lis/?p=');">GO</a>
    <script>
        function jumpTo(ths,base){
           var val= ths.previousSibling.value;
           location.href = base + val;
        }
    </script>
    """
    page_list.append(jump)

    page_str="".join(page_list)
    page_str=mark_safe(page_str)  #转换成安全的代码
    return render(request,'user_lis.html',{'li':data,'page_str':page_str})

utils-->pagetion.py

class Page:
    def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):
        self.current_page = current_page
        self.data_count = data_count
        self.per_page_count = per_page_count
        self.pager_num = pager_num

    @property
    def start(self):
        return (self.current_page - 1) * self.per_page_count

    @property
    def end(self):
        return (self.current_page) * self.per_page_count

    @property
    def total_count(self):  # 页码总个数
        v, y = divmod(self.data_count, self.per_page_count)
        if y:
            v += 1
        return v

    def page_str(self, base_url):
        page_list = []
        # start_index=1
        # end_index=count+1
        # start_index = current_page -5
        # end_index = current_page +6

        if self.total_count < self.pager_num:
            start_index = 1
            end_index = self.total_count + 1
        else:
            if self.current_page <= (self.pager_num + 1) / 2:
                start_index = 1
                end_index = self.pager_num + 1
            else:
                start_index = self.current_page - (self.pager_num - 1) / 2
                end_index = self.current_page + (self.pager_num + 1) / 2
                if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:
                    end_index = self.total_count + 1
                    start_index = self.total_count - self.pager_num + 1

        if self.current_page == 1:
            prev = "<a class='page' href='#'>上一页</a>"
        else:
            prev = "<a class='page' href='%s?p=%s'>上一页</a>" % (base_url, self.current_page - 1,)
        page_list.append(prev)

        for i in range(int(start_index), int(end_index)):
            if i == self.current_page:
                temp = "<a class='page active' href='%s?p=%s'>%s</a>" % (base_url, i, i)
            else:
                temp = "<a class='page' href='%s?p=%s'>%s</a>" % (base_url, i, i)
            page_list.append(temp)

        if self.current_page == self.total_count:
            nex = "<a class='page' href='javascript:void(0);'>下一页</a>"
        else:
            nex = "<a class='page' href='%s?p=%s'>下一页</a>" % (base_url, self.current_page + 1,)
        page_list.append(nex)

        jump = """
           <input type="text" /><a onclick="jumpTo(this, '%s?p=');">GO</a>
           <script>
               function jumpTo(ths,base){
                  var val= ths.previousSibling.value;
                  location.href = base + val;
               }
           </script>
           """ % (base_url,)
        page_list.append(jump)

        from django.utils.safestring import mark_safe
        page_str = "".join(page_list)
        page_str = mark_safe(page_str)  # 转换成安全的代码

        return page_str

user_lis.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .pagination .page{
            display: inline-block;
            padding:5px;
            background-color: cyan;
            margin:5px;
        }
        .pagination .page.active{
            background-color: brown;
            color:white;
        }
    </style>

</head>
<body>
    <ul>
        {% for item in li %}
            {% include 'li.html' %}
        {% endfor %}
    </ul>

    <div>
    <select id="sel" onchange="changePageSize(this)" >
        <option value="10">10</option>
        <option value="30">30</option>
        <option value="50">50</option>
        <option value="100">100</option>
    </select>
    </div>

    <div class="pagination">
       {{ page_str}}
    </div>
    <script src="/static/jquery-1.12.4.js"></script>
    <script src="/static/jquery.cookie.js"></script>
    <script>
        $(function () {
            var v=$.cookie('per_page_count',v,{'path':'/user_lis'});
            $('#sel').val(v)
        });

        function changePageSize(ths) {
            var v= $(ths).val();
            $.cookie('per_page_count',v,{'path':"/user_lis"});
            location.reload();

        }
    </script>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>欢迎登录:{{current_user}}</h1>
</body>
</html>

模板导入_分页_cookie_装饰器_实例的更多相关文章

  1. OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图

    读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...

  2. Python_oldboy_自动化运维之路_函数,装饰器,模块,包(六)

    本节内容 上节内容回顾(函数) 装饰器 模块 包 1.上节内容回顾(函数) 函数 1.为什么要用函数? 使用函数之模块化程序设计,定义一个函数就相当于定义了一个工具,需要用的话直接拿过来调用.不使用模 ...

  3. python_装饰器_语法糖

    什么是高阶函数? -- 把函数名当做参数传给另外一个函数,在另外一个函数中通过参数调用执行 #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog ...

  4. python3.5-day5_迭代器_生成器_装饰器_模块

    笔者QQ 360212316 迭代器&生成器 生成器: 一个函数调用返回一个迭代器,那这个函数叫做生成器,如果函数中包含yield语法,那么这个函数就会变成生成器 生成器的特点: 1.生成器必 ...

  5. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

    1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

  6. Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

    装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.?  装饰器 原函数返回值 ...

  7. Django(4)html模板继承、模板导入、分页实现

    1.获取所有请求信息 导入模块:from django.core.handlers.wsgi import WSGIRequest request.environ:包含所有的请求信息,可以打印看一下, ...

  8. django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件

    一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用  {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...

  9. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  10. Python之装饰器的实例

    1.1装饰器的应用:参数类型检查 函数参数的检查,一定是在函数外 函数应该作为参数,传入到检查函数中 检查函数拿到函数传入的实际参数,与形参声明对比 __annotations__属性是一个字典,其中 ...

随机推荐

  1. 安川机器人HW1171766-A本体线缆维修详解

    随着工业自动化程度的不断提高,安川机器人在生产线上的应用越来越广泛.然而,在长期运行过程中,安川机器人本体线缆可能会出现磨损.老化.断裂问题,这些问题不仅会影响机器人的正常运行,还可能导致生产线的停滞 ...

  2. android无障碍开发 企业微信 机器人

    实现 Android 无障碍开发 企业微信 机器人 作为一名新入行的开发者,你可能对如何开发一个支持企业微信的无障碍机器人感到迷茫.在这篇文章中,我将为你详细讲解实现这一功能的流程和代码示例. 流程概 ...

  3. docker - [15] springboot微服务打包docker镜像

    步骤: 1.构建Springboot项目 2.打包应用 3.编写dockerfile 4.构建docker镜像 5.发布运行 一.构建Springboot项目 (1)创建一个SpringBoot(以下 ...

  4. docker - [07] 部署ES+Kibana

    思考问题:以后在Tomcat部署项目,如果每次都要进入容器会十分麻烦,是否可以在容器外部提供一个映射路径,webapps,在外部放置项目,自动同步到容器内部? 一.启动es docker run -d ...

  5. CF2029C New Rating

    思路(二分 + 数据结构优化DP) 大致题意为:一个值 \(x\) 初始为 \(0\),然后有一个数组 \(a\),遍历一次数组. 如果 \(a_i > x\),则 \(x + 1\). 如果 ...

  6. Elasticsearch搜索引擎学习笔记(二)

    可视化插件 GitHub搜索elasticsearch-head并下载,如果网络不好可以在gitee上搜索. 这是一个前端项目,需要安装nodejs. 在项目根目录执行 npm install npm ...

  7. Elasticsearch搜索引擎学习笔记(一)

    核心概念 ES -> 数据库 索引index -> 表 文档 document -> 行(记录) 字段 fields -> 列 安装Elasticsearch 1. 上传后解压 ...

  8. 【ABAQUS2023-Output Vars】使用记录

    计算结构的应变能,ALLSE=所有单元的ESEDEN*EVOL.但这不适用于模态分析,因为模态分析EVOL不能用 ALLSE Field: no History: yes .fil: automati ...

  9. 【前端动画】—— 再看tweenJS

    16开始接触前端,一直对一个问题特别感兴趣,那就是js动画,也就是从那时起开始探究动画的各种表现形式,也是那个时候开始意识到编程这块东西最终考验的就是抽象和逻辑,而这一切完全是数学里边的东西. 最早接 ...

  10. go 简单封装数学运算包

    前言 我们在编写程序时,经常会遇到一些高精度的数学运算,这时候使用简单的运算符会造成精度的缺失. 这里引用了这个第三方包 https://github.com/shopspring/decimal 做 ...