老师网址:

https://www.cnblogs.com/yuanchenqi/articles/7652353.html

1,复习上级课,一对一,一对多,多对多的使用

  1. models.py:
  2.  
  3. class Book(models.Model):
  4.  
  5. nid=models.AutoField(primary_key=True)
  6. title=models.CharField(max_length=)
  7.  
  8. # 书籍与出版社: 一对多
  9. publisher=models.ForeignKey(to="Publish",related_name="bookList")
  10.  
  11. # 书籍与作者: 多对多
  12. authors=models.ManyToManyField("Author")
  13.  
  14. class Publish(models.Model):
  15.  
  16. name=models.CharField(max_length=)
  17.  
  18. class Author(models.Model):
  19. name=models.CharField(max_length=)
  20.  
  21. class AuthorDetail(models.Model):
  22.  
  23. addr=models.CharField(max_length=)
  24. author=models.OneToOneField("Author")
  25.  
  26. 、单表查询
  27.  
  28. models.Book.obejcts.all() # QuerySet []
  29. models.Book.obejcts.filter(nid__gt=,nid__lt=) # QuerySet []
  30. models.Book.obejcts.get() # model对象
  31. models.Book.obejcts.values() # QuerySet [{},{}]
  32. models.Book.obejcts.values_list()
  33. models.Book.obejcts.exclude()
  34. models.Book.obejcts.all().first()
  35. models.Book.obejcts.all().last()
  36. models.Book.obejcts.all().orderby()
  37. models.Book.obejcts.all().reverse()
  38. models.Book.obejcts.values("price").distinct()
  39. models.Book.obejcts.all().count()
  40. models.Book.obejcts.all().exist()
  41.  
  42. ---- 双下划线:
  43. models.Book.obejcts.filter(nid__gt=)
  44. models.Book.obejcts.filter(price__in=[,,])
  45.  
  46. 支持链式操作:
  47. models.Book.obejcts.all().filter().orderby("id").count()
  48. models.Book.obejcts.all().get().orderby("id").count()
  49.  
  50. 、跨表查询
  51.  
  52. ---- 基于对象
  53.  
  54. () 查询Linux这本书的出版社名称和作者名字 属于正向查询 按关联字段
  55. book_obj=models.Book.obejcts.get(title="linux")
  56. book_obj.publisher.name
  57.  
  58. authors_list=book_obj.authors.all()
  59. for author in authors_list:
  60. print(author.name)
  61.  
  62. () 人民出版社出版过的所有书籍名称 属于反向查询 if 设置related_name,那么related_name的值,没有设置,按表明_set
  63. publish_obj=models.Publish.obejcts.filter(name="人民出版社").first()
  64. book_list=publish_obj.bookList.all()
  65. for book in book_list:
  66. print(book.title)
  67.  
  68. () alex 出版社过得所有书籍的名称 属于反向查询 if 设置related_name,那么related_name的值,没有设置,按表明_set
  69. alex=models.Author.obejcts.get(name="alex")
  70. book_list=alex.book_set.all()
  71. for book in book_list:
  72. print(book.title)
  73.  
  74. () 作者alex的所在地址 正向查询 按字段 反向查询 按表名
  75. alex=models.Author.obejcts.get(name="alex")
  76. alex.authordetail.addr
  77.  
  78. ---- 基于QuerySet 双下划线: 正向查询:按字段 反向查询:按表名 key 过滤条件 查询结果
  79.  
  80. () 查询Linux这本书的出版社名称和作者名字 属于正向查询 按关联字段
  81.  
  82. models.Book.obejcts.filter(title="linux").values("publisher__name") # [{"publisher__name":"人民出版社"}]
  83. models.Book.obejcts.filter(title="linux").values("authors__name") #
  84.  
  85. () 人民出版社出版过的所有书籍名称
  86.  
  87. models.Book.obejcts.filter(publisher__name="人民出版社").values("title")
  88.  
  89. models.Publish.obejcts.filter(name="人民出版社").values("book__title")
  90.  
  91. () alex 出版社过得所有书籍的名称
  92.  
  93. models.Book.obejcts.filter(authors__name="alex").values("title")
  94.  
  95. models.Author.obejcts.filter(name="alex").values("book__title")

2,分页怎么做的:

如果说短时间内一条条的添加数据的话,可能会造成服务器压力太大。

可以将要创建的数据打包,然后在一起放入数据库。

  1. def add(request):
  2. Booklist = []
  3. for i in range():
  4. book_obj=models.Book(title="book" + str(i), price= + i * i)
  5. Booklist.append(book_obj)
  6.  
  7. models.Book.objects.bulk_create(Booklist)

先引用一个变量:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

paginator(book_list,8)

# book_list:是你要分页的数据

#  8: 每页数据的条数

  1. '''
  2. 分页器的使用:
  3. book_list=Book.objects.all()
  4. paginator = Paginator(book_list, )
  5. print("count:",paginator.count) #数据总数
  6. print("num_pages",paginator.num_pages) #总页数
  7. print("page_range",paginator.page_range) #页码的列表
  8.  
  9. page1=paginator.page() #第1页的page对象
  10. for i in page1: #遍历第1页的所有数据对象
  11. print(i)
  12. print(page1.object_list) #第1页的所有数据
  13.  
  14. page2=paginator.page()
  15.  
  16. print(page2.has_next()) #是否有下一页
  17. print(page2.next_page_number()) #下一页的页码
  18. print(page2.has_previous()) #是否有上一页
  19. print(page2.previous_page_number()) #上一页的页码
  20.  
  21. # 抛错
  22. #page=paginator.page() # error:EmptyPage
  23. #page=paginator.page("z") # error:PageNotAnInteger
  24.  
  25. '''

可以利用bootstrap来进行样式改:

怎么遍历显示图标数字:

  1. {% for i in page_range %}
  2. <li><a href="/?p={{i}}">{{i}}></a></li>
  3. {% endfor %}
  4.  
  5. shangyiye:
  6.  
  7. xiayiye:

3, cookie和session:

  1. cookie 保留在客户端(浏览器)的存放键值对的容器 {"":""}
  2.  
  3. session 保留在服务器上的一个容器 {"":""}
  4.  
  5. def login:
  6. if :
  7. request.session["is_login_egon"]=True
  8. request.session["username"]="alex"
  9.  
  10. # 赋值session实现了什么
  11. () django---写好响应cookie:{"sessionID":"123asdas12312"}
  12. () dajngo--- django-session表中创建一条记录
  13.  
  14. session-key session-data
  15. 123asdas12312 {"is_login_egon":True,"username":"alex"}
  16.  
  17. def index:
  18. if not request.session.get("is_login_egon"):
  19. # 取值session ,实现了什么
  20. () dajngo-- 先获取cookiesessionID 123asdas12312
  21. () django---ret=models.django_session.objects,filter(session-key="123asdas12312")
  22.  
  23. () 我们自己实现的:ret["is_login_egon"]
  24.  
  25. return redirect("/login/")
  26.  
  27. {"sessionID"L:""}
  28.  
  29. 会话---session
  30. 注销---清除session
  31. request.session.flush()
  32.  
  33. () dajngo-- 先获取cookiesessionID 123asdas12312
  34. () django---ret=models.django_session.objects.filter(session-key="123asdas12312")
  35.  
  36. () flushret.delete()

4,auth模块

直接在Terminal中可以创建用户:

python manage createsuperuser

auth的引入:

from django.contrib import auth

  1. authenticate()
  2.  
  3. 提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数
  4.  
  5. 如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!
  6.  
  7. user =authenticate(username='someone',password='somepassword')

注销页面:

  1. login(HttpRequest, user)  
  2.  
  3. 该函数接受一个HttpRequest对象,以及一个认证了的User对象
  4.  
  5. 此函数使用djangosession框架给某个已认证的用户附加上session id等信息。
  6.  
  7. from django.contrib.auth import authenticate, login
  8.  
  9. def my_view(request):
  10. username = request.POST['username']
  11. password = request.POST['password']
  12. user = authenticate(username=username, password=password)
  13. if user is not None:
  14. login(request, user)
  15. # Redirect to a success page.
  16. ...
  17. else:
  18. # Return an 'invalid login' error message.
  19. ...
  20. logout(request) 注销用户  
  21.  
  22. from django.contrib.auth import logout
  23.  
  24. def logout_view(request):
  25. logout(request)
  26. # Redirect to a success page.
  27. 该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
  28.  
  29. user对象的 is_authenticated()
  30.  
  31. 要求:
  32.  
  33. 用户登陆后才能访问某些页面,
  34.  
  35. 如果用户没有登录就访问该页面的话直接跳到登录页面
  36.  
  37. 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址
  38.  
  39. 方法1:
  40.  
  41. def my_view(request):
  42. if not request.user.is_authenticated():
  43. return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
  44. 方法2:
  45.  
  46. django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()
  47.  
  48. from django.contrib.auth.decorators import login_required
  49.  
  50. @login_required
  51. def my_view(request):
  52. ...
  53. 若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递 当前访问url的绝对路径 (登陆成功后,会重定向到该路径)

5,session配置:

数据库配置:

  1. Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
  2.  
  3. a. 配置 settings.py
  4.  
  5. SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
  6.  
  7. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
  8. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径(默认)
  9. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
  10. SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
  11. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
  12. SESSION_COOKIE_AGE = # Session的cookie失效日期(2周)(默认)
  13. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
  14. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)

缓存配置:

  1. a. 配置 settings.py
  2.  
  3. SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
  4. SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
  5.  
  6. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
  7. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径
  8. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
  9. SESSION_COOKIE_SECURE = False # 是否Https传输cookie
  10. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
  11. SESSION_COOKIE_AGE = # Session的cookie失效日期(2周)
  12. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
  13. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存

文件配置:

  1. a. 配置 settings.py
  2.  
  3. SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
  4. SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
  5. SESSION_COOKIE_NAME "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
  6. SESSION_COOKIE_PATH "/" # Session的cookie保存的路径
  7. SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名
  8. SESSION_COOKIE_SECURE = False # 是否Https传输cookie
  9. SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输
  10. SESSION_COOKIE_AGE = # Session的cookie失效日期(2周)
  11. SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期
  12. SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存

Day20 Django的使用_基础的更多相关文章

  1. web前端学习python之第一章_基础语法(二)

    web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  2. web前端学习python之第一章_基础语法(一)

    web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...

  3. Django学习笔记(基础篇)

    Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html

  4. SSM整合_年轻人的第一个增删改查_基础环境搭建

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  5. Python学习-day20 django进阶篇

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  6. Day20 Django之Model多对多、中间件、缓存、信号和分页

    一.Form补充 class IndexForm(forms.Form): # c = [ # (1, 'CEO'), # (2, 'CTO') # ] # 静态字段,属于IndexForm类,即使数 ...

  7. CI下载与安装_基础配置_MVC

    CI:CodeIgniter -- 由Ellislab公司的CEORickEllis开发,是一个简单快速的PHP MVC框架. =============下载和安装================地址 ...

  8. Django框架第一篇基础

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...

  9. Django框架之模板基础,静态文件配置

    一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.html文件,2.把要显示的页面的内容写在这里 ...

随机推荐

  1. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  2. 学习笔记-JS公开课三

    DOM技术概述 DOM : DocumentObject Model 将HTML标记型文档,封装成对象,提供更多的属性和行为 DOM的三级模型 第一级:将标记型文档,封装成对象,提供更多的属性和行为 ...

  3. 看人装X,我就来气,开启极限装X模式

    本文书写,纯属扯淡,请勿观看 4进制比二进制更合理,在01的状态中添加了两种状态,从无到有和从有到无的两种过度状态. 如果非要用数值表示,用概率表示.01作为近代计算机的基础,但终究淘汰,构成下一代计 ...

  4. UI设计——最后一根稻草

    WindowsLive提供的本地地图服务看起来挺简单的,但其实非常难用: 跟其他人一样,每当我接触到一个新的地图服务,我做的第一件事总是拿当前的地址去试一试.我在上面输入的是我工作的地方.但是,当我敲 ...

  5. FilterDispatcher is depredated!plesae use the new filters

    一些struts2的教程都是比较早的,当我们基于较新版本的struts2来实现代码的时候,往往会出现一些问题.比如这个警告:FilterDispatcher isdeprecated! 在web.xm ...

  6. 使用LogKit进行日志操作

    1.      概述 任何一个系统中,日志都是不可缺少的,现在Apache提供了两套日志工具,一个就是Log4j,另一个是本文要给出例子的LogKit. Log4j和LogKit有很多相似的地方.比如 ...

  7. 【Linux学习笔记】关于ubuntu开机菜单栏和任务栏不见了的有效解决方法

    (一) 问题描述 ubuntu开机只有桌面,没有菜单栏和任务栏,如下图: (二) 问题解决 刚学习ubuntu,总有些像我这样不折腾就不舒服的人,今天改了一下主题,图标什么的,重启开机后就发现!咦!我 ...

  8. viewpager循环滚动和自动轮播的问题

    ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的Vie ...

  9. CentOS安装并设置MariaDB

    作者: 铁锚 日期: 2013年12月27日 部分参考: Centos 使用YUM安装MariaDB 说明: 首先必须能链接外网. 如果不能直接访问,那也可以设置代理,请参考: 在内网机器上设置yum ...

  10. 取消选中单选框radio的三种方式

    作者: 铁锚 日期: 2013年12月21日 本文提供了三种取消选中radio的方式,代码示例如下: 本文依赖于jQuery,其中第一种,第二种方式是使用jQuery实现的,第三种方式是基于JS和DO ...