Django-07-session、分页和admin

session

  • 为了对应HTTP的无状态性
  • session是服务器根据user的信息生成,并存储到数据库
  • 用来保存用户的敏感信息
  • session是request的一个属性
  • 常用操作:
    • request.session.get(key, defaultValue) 获取session中的一个key值,如果没指定的key就返回defaultValue
    • request.session.clear() 清除全部session内的值
    • request.session[key] = value 赋值操作
    • request.session.flush() 删除当前会话服务器中的session和用户的cookie
    • del reques.session[key] 删除指定键值的session
print(request.session)
print(request.session.get("key", "None"))
request.session.clear()

分页

  • django提供线程的分页器用来对结果进行分页
  • 使用from django.core.paginator import Paginator 进行导入
from django.core.paginator import Paginator

def fenye(request):

    s = libs.objects.all()

    #参数1:数据来源
    #参数2:每页条目数
    p = Paginator(s, 50)

    #实例p中有多少条目
    print(p.count)

    #实例p中一共有多少页
    print(p.num_pages)

    #实例p的页码列表,从1开始
    print(p.page_range)

    #取得第二页内容
    #如果页面不存在,报异常`InvalidPage`
    p.page(2)

    return p

基于类的视图

  • 可以针对http协议不同的方法创建不同的函数
  • 可以使用Mixin等oop技术
  • Mixin
    • 把来自父类的行为或者属性组合在一起
    • 可以解决多重继承的问题
  • ListView
    • 列表形式呈现
#views修改

from django.views.generic import ListView

def LibsListView(ListView):

    #需要设置两个主要内容
    #1. queryset 数据来源
    #2. template_name 模板名称
    queryset = libs.objects.all()
    template_name = "libs_list.html"
#urls修改
from app import views as av
url(r'libs/', av.LibsListView.as_view()),

admin

  • django自带一套后台管理系统
  • 首先要迁移数据库,才能拥有超级用户
  • 建立超级用户
  • 使用浏览器输入http://127.0.0.1:8000/admin登录
#创建超级用户
#在`shell`的工程目录下
python manage.py createsuperuser
#然后输入用户名,邮件地址,密码
#汉化admin,在`settings`中
LANGUAGE_CODE = 'zh-Hans'
#时区的修改
TIME_ZONE = 'UTC'

绑定管理模型

  • 修改app下admin.py
  • 在admin后台中就可以查到,新建的模型
#导入models下建立好的模型
from app.models import purchase, libs
#绑定建立好的模型
admin.site.register(purchase)
admin.site.register(libs)

设置admin管理类

  • 实现方法
    • ModelAdmin
    • 装饰器
  • 实现内容
    • 修改页面显示数量:list_per_page
    • 操作选项在条目上方还是下方:actions_on_top/button
    • 在中条目列表中添加列属性:list_display=[]
  • 将模型的方法作为条目列表中的列显示
    • 函数必须有返回值
    • 设置short_descraption作为显示内容
    • 条目以什么规则排序admin_order_field,主要针对新加函数
  • 条目列显示关联
    • 在有关联语句的模型中添加
    • 和添加其他条目类似
  • 添加搜索框
    • 使用search_fields = ["以什么规则搜索"]
  • 屏蔽字段
    • 每个条目中有些信息不希望被别人看到
    • fields = ["希望显示项", "希望显示项"]
  • 给总条目的列进行分组
    • fieldsets = ()
  • 设置站的外观
    • admin.site.site_header = "站头"
    • admin.site.site_title = "站标题"
    • admin.site.index_title = "首页标语"
#admin.py修改
#ModelAdmin方法
class purchaseAdmin(admin.ModelAdmin):
    #每页显示条目数量
    list_per_page = 1
    #操作选项在上下都有
    actions_on_top = True
    actions_on_bottom = False
    #控制条目中某一项列是否显示
    #添加显示当前时间,添加关联列
    list_display = ["purchase_name", "purchase_model", "dq_time", "getMyLibs"]
    #添加搜索条,并指定规则
    search_fields = ["purchase_name"]
    #给总条目的列添加分组
    fieldsets = (
        ("基本信息", {"fields":["purchase_name", ]}),
        ("其他信息", {"fields":["pruchase_model", "my_libs"]}),
    )

class libsAdmin(admin.ModelAdmin):
    pass

admin.site.register(purchase, purchaseAdmin)
admin.site.register(libs, libsAdmin)
#admin.py修改
#装饰器方法
@admin.register(purchase)
class purchaseAdmin(admin.ModelAdmin):
    pass  
@admin.register(libs)
class libsAdmin(admin.ModelAdmin):
    pass
#models.py修改
#添加事件列的修改
import time
#添加时间列,在模型中添加函数
#注意此函数一定要有返回值
def dq_time(self):
    return time.time()
#默认列名是函数名,更改列名
dq_time.short_description = "当前时间"
#在指定列,以指定规则排序
dq_time.admin_order_field = "purchase_name"
#models.py修改
#添加关联列的修改
#在添加关联项的模型中修改
def getMyLibs(self):
        return self.my_libs.libs_name
getMyLibs.short_description = "仓库"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值