Django 自定义表单验证+高级分页

urls:

urlpatterns = [
    path('addinfo/', views.add_info, name='add_info'),
    path('selectinfotwo/<int:page>/', views.select_infotwo, name='select_infotwo'),
]

models:

class Form_Info(models.Model):
    id = models.AutoField(primary_key=True, unique=True, null=False)
    users_names = models.CharField(max_length=16, unique=True)
    users_pass = models.CharField(max_length=8)

    class Meta:
        db_table = 'Form_Info'

forms:

class AddInfoForms_Validation(forms.Form):
    users_names = forms.CharField(
        required=True,
        max_length=16,
        min_length=8,
        label='用户名',
        error_messages={
            'required': "用户名不能为空",
            'max_length': "用户名最长不能超过8个汉字",
            'min_length': "用户名最少不能低于4个汉字"
        }
    )

views:

def add_info(request):
    if request.method == "GET":
        return render(request, 'useradd.html')
    elif request.method == "POST":
        Validation = AddInfoForms_Validation(request.POST)
        if Validation.is_valid():
            users_names = request.POST.get("users_names")
            users_pass = request.POST.get("users_pass")
            save = Form_Info.objects.create(users_names=users_names, users_pass=users_pass)
            return redirect(reverse("django_form:select_info", kwargs={'id': 1}))
        else:
            return render(request, 'useradd.html', {'info': Validation.errors})

# Django内置分页
def select_infotwo(request, page):
    data_list = Form_Info.objects.all().order_by("-id")
    # 全部数据:data_list,=》得出共有多少条数据
    # per_page: 每页显示条目数量
    # count:    数据总个数
    # num_pages:总页数
    # page_range:总页数的索引范围,如: (1,10),(1,200)
    # page:     page对象(是否具有下一页;是否有上一页;)
    current_page = request.GET.get('p', page)  # 当前页码
    current_page = int(current_page)
    # Paginator对象
    paginator = Paginator(data_list, 1)  # 一页放10个数据
    # 加判断当总页数大于10页 让一部分不显示出来
    if paginator.num_pages > 10:
        if current_page - 5 < 1:
            posts_list = range(1, 11)
        elif current_page + 5 > paginator.num_pages:
            posts_list = range(current_page - 5, paginator.num_pages + 1)
        else:
            posts_list = range(current_page - 5, current_page + 5)
    else:
        # 当小于等于10页时全部显示
        posts_list = paginator.page_range
    try:
        # Page对象
        posts = paginator.page(current_page)
        # has_next              是否有下一页
        # next_page_number      下一页页码
        # has_previous          是否有上一页
        # previous_page_number  上一页页码
        # object_list           分页之后的数据列表,已经切片好的数据
        # number                当前页
        # paginator             paginator对象
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    return render(request, 'userselecttwo.html', {'posts': posts, "posts_list": posts_list})

userselect.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->

    <link rel="stylesheet" type="text/css" id="change_color" href="{% static 'css/blue.css' %}"/>
    <link rel="stylesheet" type="text/css" href="{% static 'css/all_select.css' %}"/>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <link rel="stylesheet" href="{% static 'plugin/bootstrap_table/bootstrap-table.css' %}">

    <script type="text/javascript" src="{% static 'js/jquery-3.1.1.min.js' %}"></script>
    <script src="{% static 'js/bootstrap.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'plugin/bootstrap_table/bootstrap-table.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'plugin/layer/layer.js' %}"></script>
    <script src="{% static 'js/all_select_serch.js' %}"></script>
    <script>
        $(function () {
            $(window.parent.document).find(".tab_v>li>a:contains('平台用户信息修改')").parent().remove();
        })
    </script>
</head>
<body>
<div class="container-fluid leftp" role="main">
    <div class="row">
        <!--警告框-->
        <div class="alert alert-warning alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
                    aria-hidden="true">&times;</span></button>
            <span class="glyphicon glyphicon-info-sign"></span>友情提示,这里是平台用户查看!<a
                href="{% url 'django_form:add_info' %}">添加信息</a>
        </div>
        <!--面板-->
        <form class="form-inline" method="post" action=''>{% csrf_token %}
            <div class="panel panel-primary panel-table">
                <div class="panel-heading add-panel clearfix">
                    <label class="pull-left"><span class="glyphicon glyphicon-list-alt"></span>平台用户查看</label>
                </div>
                <div class="panel-body panel-table" id="goodsList">
                    <table data-toggle="table" data-height="340" class="table table-striped table-hover"
                           id="tableL01">
                        <thead>
                        <th data-width="80px">ID编号</th>
                        <th data-width="120px">用户名</th>
                        <th data-width="120px">密码</th>
                        </thead>
                        <tbody id="testTbody">
                        {% for row in posts.object_list %}
                            <tr>
                                <td class='text-center'>{ { row.id }}</td>
                                <td>{ { row.users_names }}</td>
                                <td>{ { row.users_pass }}</td>
                            </tr>
                        {% empty %}
                            <tr>
                                <td colspan="12" align="center">
                                    您还没有添加信息
                                </td>
                            </tr>
                        {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </form>
    </div>
    <nav aria-label="Page navigation example" class="text-center">
        <ul class="pagination">
            <li class="page-item">
                <a class="disabled" href="#"><span aria-hidden="true">共{ { posts.paginator.count }}条</span> | <span aria-hidden="true">每页{ { posts.paginator.per_page }}条</span></a>
            </li>
            <li class="page-item">
                <a class="disabled" href="{% url 'django_form:select_infotwo' 1 %}"><span aria-hidden="true">首页</span></a>
            </li>
            <li class="page-item">
                {% if posts.has_previous %}
                    <a class="disabled" href="{% url 'django_form:select_infotwo' posts.previous_page_number %}" aria-label="Previous">上一页</a>
                {% else %}
                    <a class="disabled">上一页</a>
                {% endif %}
            </li>
            {% for i in posts_list %}
                {% if i == posts.number %}
                    <li class="active"><a class="page-link" href="#">{ { i }}</a></li>
                {% else %}
                    <li class="page-link"><a class="page-link" href="{% url 'django_form:select_infotwo' i %}">{ { i }}</a></li>
                {% endif %}
            {% endfor %}
            <li class="page-item">
                {% if posts.has_next %}
                    <a class="disabled" href="{% url 'django_form:select_infotwo' posts.next_page_number %}" aria-label="Next">下一页</a>
                {% else %}
                    <a class="disabled" aria-label="Next">下一页</a>
                {% endif %}
            </li>
            <li class="page-item">
                <a class="disabled" href="{% url 'django_form:select_infotwo' 0 %}"><span aria-hidden="true">尾页</span></a>
            </li>
            <li class="page-item">
                <a class="disabled" href="#"><span aria-hidden="true">共{ { posts.paginator.num_pages }}页</span></a>
            </li>
        </ul>
    </nav>
</div>
<script src="{% static 'js/alldh.js' %}"></script>
<script src="{% static 'js/nav.js' %}"></script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/vlking/article/details/108330615
今日推荐