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

Django框架学习(6)

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框架学习(6)

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

python3 manage.py clearsessions

来删除以过期的session数据

Original: https://blog.csdn.net/m0_62811567/article/details/123530680
Author: zyzyss
Title: Django框架学习(6)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/734606/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球