django基础-day78

首先auth就是一个认证模块,
from django.contrib import auth
ps:包括前面学习的cookie,session等,
它们就好比我们自己实现某个功能,把某些部分模块化就有了它们,
不过这些模块是大牛写的,各方面会比我们写的要好,


说到认证,我们就会提到数据库表,
auth模块使用的是django自带的auth_user表,
这个表包含很多字段,比如最后一次登录时间等,
ps:创建用户命令,python manage.py createsuperuser
ps2:表中的密码字段是MD5摘要的,也使得我们验证繁琐了,
ps3:不过系统给我们提供了验证的方法,
	user=auth.authenticate(username=user, password=pwd),
	成功会返回user对象, 
	失败返回NULL,


认证成功后,就是login,
这里和我们前面讲的cookie和session登录,是类似的,
auth.login(request,user)
之后,session中就包含了我们的登录信息,(即我们登录成功)
ps:没有登录的时候,系统种有一个匿名用户,它的相关信息都是空,
注销的方法是auth.logout(request),
ps:这个logout很一般,不过你用了login,就得用logout,因为他们是一起的,



访问其它页面的前提是你通过了认证,
这里可以通过request.user.is_authenticated来判断,
ps:注意这里把函数的调用属性化了


最后,用户相关操作,
首先,你不能直接操作用户表,你得通过User对象来操作,
User.objects.create(username="alex",password=123)
User.objects.create_user(username="alex",password=123)
User.objects.create_superuser(username="alex",password=123)
ps:不能用第一种,一个原因是这样创建是明文,
	第二种是密码摘要的方式创建用户,
	第三种是创建超级用户,用于进行后台操作,



django基础-day78_第1张图片

这是批量插入数据,
如果通过create的方式,就是频繁的撞库.很慢.



分页组件,
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
book_list = Book.objects.all()
如果一下把所有数据都在浏览器中进行渲染,就很丑.
于是利用
Paginator来分页显示.




一个异常的例子,体会到异常处理的重要,
ps:如果出现异常不处理,那么程序就崩了,
若页码无意被输入一个错误值,不在范围的,
我们异常处理中给它设为一个安全值.比如1,
那么至少不会使程序崩溃,


django基础-day78_第2张图片

分页的语法

from django.shortcuts import render
# Create your views here.
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01.models import Book

def index(request):

    '''
    批量导入:
    book_list=[]
    for i in range(100):
        book=Book(title="book_%s"%i,price=i*i)
        book_list.append(book)

    Book.objects.bulk_create(book_list)


    分页器:
            print(paginator.count) # 总数据量  100
            print(paginator.num_pages) # 分页数  10
            print(paginator.page_range) # range(1, 11)


            page_01=paginator.page(1)
            # print(page_01.has_next())
            # print(page_01.has_previous())
            # print(page_01.next_page_number())
            # print(page_01.previous_page_number())

            for obj in page_01:
                print(obj)

    :param request:
    :return:
    '''

    book_list=Book.objects.all()
    paginator=Paginator(book_list,10) # 每页显示10条


    try:
        current_num=int(request.GET.get("page",1))
        book_list=paginator.page(current_num)
    except EmptyPage:
        book_list = paginator.page(1)

    #  如果页数十分多时,换另外一种显示方式
    if paginator.num_pages > 11:

        if current_num - 5 < 1:
            pageRange = range(1, 11)
        elif current_num + 5 > paginator.num_pages:
            pageRange = range(current_num - 5, paginator.num_pages + 1)

        else:
            pageRange = range(current_num - 5, current_num + 6)

    else:
        pageRange = paginator.page_range

    return render(request,"index.html",locals())




    
    Title
    


INDEX

    {% for book in book_list %}
  • {{ book.title }}---{{ book.price }}
  • {% endfor %}

你可能感兴趣的:(Django)