IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django框架学习(6) -> 正文阅读

[Python知识库]Django框架学习(6)

目录

一.admin管理后台

1.创建后台管理账号

2.注册自定义模型类

3.模型管理器

?二.关系映射

1.一对一映射

2.一对多映射

3.多对多映射

三.会话

1.cookies

?2.session


一.admin管理后台

django提供了比较完整的后台管理数据库的接口,可供开发调试,

djanog会搜集所有已注册的模型类,为开发者提供管理页面

1.创建后台管理账号

#manage.py同名文件夹下
python3 manage.py createsuperuser
#创建超级管理员

2.注册自定义模型类

#在admin.py中
from .models import Book

admin.site.register(Book)

3.模型管理器

修改admin页面的自定义类的部分功能

#在admin.py中

from .modles import admin

class BookManger(admin.ModelAdmin):
    #在后台显示那些列
    list_display=['属性']
    #让那个字段做超链接
    list_display_links=['属性']
    #添加过滤器
    list_filter=['属性']
    #给那个字段添加模糊搜索
    seacher_fields=['属性']
    #添加可在列表页编辑的字段
    list_editable=['属性']


admin.site.register(Book,BookManager)

?二.关系映射

在关系型数据库中,通常不会把所有数据放入同一张表中,不利于扩展,常见的关系映射有三种:

  • 一对一映射
  • 一对多映射
  • 多对多映射

1.一对一映射

a)创建表

class Author(models.Model):
    naem=...

class Wife(models.Moels):
    name=..
    author=models.OneToOneField(Author,on_delete=..)

on_delte是级联删除方式,有很多选项:

  • modles.CASCADE:django模拟SQL的ON_DELETE的行为,并删除包含ForeignKey的对象
  • models.PPROTECT:抛出ProjectedError,以防止删除(等同于mysql的RESTRICT)
  • SET_NULL:设置ForeignKey null;需要指定null=True
  • SET_DEFAULE:将ForignKey设置为默认值,必须先行设置默认值

?一般来说属性名为对应表的小写,在数据库中是属性名_对应主键名

?b)创建数据

无外键的模型类:

author1=Author.objects.create(name='')

有外键的模型类

#有两种方式
wife1=wife.objects.create(name='',author=author1)
#关联属性=obj对象
whife1=Wife.objects.create(name='',author_id=1)
#关联对应主键值=具体值

c)查询数据

正向查询(通过外键属性查询):

#通过wife查author

from .models import wife

wife=Wife.objects.get(name='')
print('对应作家是'wife.author.name)

反向查询(没有外键的一方查询设置外键的一方):

author=Author.objects.get(name='')
author1.wife.name
#若反向引用不存在,会触发异常

2.一对多映射

a)创建表

class Pub(models.Model):
    name=models.charField(..)


class Book(models.Model):
    title=...
    pub=ForeignKey(Pub,on_delete=..)
#必须指定on_delete

b)创建数据

#注意先创建一再创建多

from .models import *

pub1=Pub.objects.create(name='')

book1=Book.onjects.create(name='',publish=pub1)
book2=Book.onjects.create(name='',publish_id=1)
#创建数据依旧是两种方式

c)查询数据

正向查询:

book=Book.objects.get(name='')
book.pub.name

反向查询:

pub1=Pub.objects.get(name='')
#两种方式查询对应出版社所有书

books=pub1.book_set.all()

boosk=Book.objects.filter(pub=pub1)

3.多对多映射

在MySQL中依靠第三张表来实现,在django中自动生成

?a)创建表

class Author(.)
    name=..

class Book(.)
    name=..
    authors=models.ManyToManyField(Author)

b)创建数据

#方案一,先创建author,在关联book

author1= Author.objects.create(name='1')
author2= Author.objects.create(name='2')
book1=author.book_set.create(name='')
author2.book_set.add(book1)

#先创建book,再关联author

book2= Book.objects.create(name='2')
author3= book.authors.create(name='3')
book2.author.add(author3)

c)查询数据

正向查询:

book=Book.objects.get(name='')

book.author.all()

反向查询:

author=Author.objects.get(neame='')

author.book_set.all()

三.会话

从访问一个网站到关闭结束访问,成为一次会话

HTTP是无状态的,导致会话状态难以baochi

cookies和session就是为了保持会话状态的技术

1.cookies

cookies是保存在用户浏览器上的储存空间,

  • 以键值对形式存储的
  • 存储的数据带有生命周期
  • cookies的数据是按域隔离的,不同域之间不能访问
  • cookies里的数据每次访问时都会传输到服务器端,如果数据过大会影响响应速度

cookies的使用

def set_cookies(request):
    res=HttpResponse('set cooikes ok')
    res.set_cookies(key,value='',max_age=..,exprires=..)#设置与修改
    return res
#key:名字,value:值,max_age:存活时间,exprires:具体失效时间
#若后两个参数不指定,默认持续到关闭浏览器


def get_cookies(request):
    value=request.COOKIES.get(cookies_name,'默认值')#获得cookies
    res=HttpResponse('del cooikes ok')
    res.delete_cookies(key)#删除cookies
    return res

?

?2.session

session是在服务器上开辟一片空间(数据库)来保存浏览器和服务器交互时的重要数据

  • 使用session需要客户端启动cookies,且在cookies中存储sessionid
  • 每个客户端在服务器都有一个独立的session,不同请求者数据不相通

session的配置(settings.py):

  • ?INSTALLED_APPS中启用‘django.contrib.sessions'
  • MIDDLEWARE启用'django.contrib.sessions.middleware.SessionMiddleware'

session的使用

#添加
request.session['key']=value
#获得
value=request.session.get('key','default')
#删除
del request.session['key']

?注:由于django_session表是单表设计,且该表数据量储蓄增加,所以可每过一段时间执行

python3 manage.py clearsessions

来删除以过期的session数据

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:45:38  更:2022-03-21 20:50:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:28:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码