附录5.习题2

Django中查询queryset时什么情况下用Q方法

F:对数据本身的不同字段进行操作 如:比较和更新,对数据进行加减操作
Q:用于构造复杂的查询条件 如:& |操作

Django中验证表单提交格式是否正确需哪个函数

form.is_valid() :返回布尔值

orm如何取消级联

user = models.ForeignKey(User, blank=True, null=True, on_delete+models.SET_NULL)

并且SET_NULL只有在null为True的时候,才可以使用。

Django中如何保存和更新session

  • 保存session
    1 生成随机字符串 ltv8zy1kh5lxj1if1fcs2pqwodumr45t
    2 response.set_cookie("sessionid",ltv8zy1kh5lxj1if1fcs2pqwodumr45t)
    3 在django—session表中创建一条记录:
    session-key:ltv8zy1kh5lxj1if1fcs2pqwodumr45t
    session-data:{"is_login":True,"username":"yuan"}

  • 更新session
    在django—session表中创建一条记录:
    session-key: ltv8zy1kh5lxj1if1fcs2pqwodumr45t
    session-data:被更新的数据

简述Django对http请求的执行流程

  1. 在接受一个Http请求之前的准备,启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器。
  2. 服务器根据WSGI协议指定相应的Handler来处理Http请求,并且初始化该Handler,在Django框架中由框架自身负责实现这一个Handler。 此时服务器已处于监听状态,可以接受外界的Http请求 当一个http请求到达服务器的时候
  3. 服务器根据WSGI协议从Http请求中提取出必要的参数组成一个字典(environ)并传入Handler中进行处理。
  4. 在Handler中对已经符合WSGI协议标准规定的http请求进行分析,比如加载Django提供的中间件,路由分配,调用路由匹配的视图等。 返回一个可以被浏览器解析的符合Http协议的HttpResponse。

Django中当用户登录到A服务器进入登陆状态,下次被nginx代理到B服务器会出现什么影响

之前的登录状态会丢失

Django是如何处理跨域请求的

  • 启用中间件
  • post请求
  • 验证码
  • 表单中添加{%csrf_token%}标签

查询集的两大特性?什么是惰性执行

  • 惰性执行、缓存 。
  • 创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

查询集返回的列表过滤器有哪些

  • all():返回所有数据
  • filter():返回满足条件的数据
  • exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字
  • order_by():排序

如何获取django urlpatterns里面注册的所有url

from django.conf.urls import url,include
from arya.service.sites import site
from django.urls.resolvers import RegexURLPattern
from django.urls.resolvers import RegexURLResolver
from django.shortcuts import HttpResponse

def index(request):
  print(get_all_url(urlpatterns,prev='/'))
  return HttpResponse('...')

def get_all_url(urlparrentens,prev,is_first=False,result=[]):
  if is_first:
​    result.clear()
  for item in urlparrentens:
​    v = item._regex.strip('^')    #去掉url中的^和')    #去掉url中的^和
​    if isinstance(item,RegexURLPattern):
​      result.append(prev + v)
​    else:
​      get_all_url(item.urlconf_name,prev + v)
  return result

urlpatterns = [
  url(r'^arya/', site.urls),
  url(r'^index/', index),
]

urls.py中include的作用

进行路由转发,通常我们会在每个app里,各自创建一个urls.py路由模块,然后从根路由出发,将app所属的url请求,全部转发到相应的urls.py模块中。

urlpatterns中的name与namespace有什么作用?

  • name,给路由起一个别名
  • namespace,名字空间,防止多个应用之间的路由重复

如何给一个字段设置一个主键?

primary_key

如何设置一个带有枚举值的字典?

DateTimeField类型中的auto_now与auto_now_add有什么区别

  • DateTimeField.auto_now
    这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新。因此这个参数在需要存储“最后修改时间”的场景下,十分方便。需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin中是只读的。
  • DateTimeField.auto_now_add
    这个参数的默认值也为False,设置为True时,会在model对象第一次被创建时,将字段的值设置为创建时的时间,以后修改对象时,字段的值不会再更新。该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。

values()与values_list()有什么区别?

  • values : 取字典的queryset
  • values_list : 取元组的queryset

selected_related与prefetch_related有什么区别?

  • select_related适用于外键和多对一的关系查询;
  • prefetch_related适用于一对多或者多对多的查询。

当删除一个外键的时候,如何把与其关联的对应关系删除

使用on_delete参数

class Meta中常用的元信息字段有哪些

app_label
指定模型类是那个应用程序的
db_table
指定自定义数据库表名
若不提供该参数, Django 会使用 app_label + '_' + module_name 作为表名
ordering
告诉Django模型对象返回的记录结果集是按照哪个字段排序




- end -

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容