2、基于Python下的web框架之中最具有代表性的一个——Django

是,许多成功的网站和app都基于Django(Uber、Instagram),开放源代码,遵从BSD版权,采用MVC的软件设计模式,及模型M,视图V和控制器C。

(BSD伯克利软件发行版,开源许可协议,保护原始作者的身份,至少得到身份认可,还可以防止其它人将产品据为己有

如何使用django orm批量创建数据?

def bulk_create(self, objs, batch_size=None):
    # 批量插入
    # batch_size表示一次插入的个数
    objs
= [
        models.DDD(name=‘r11‘),
        models.DDD(name=‘r22‘)
    ]
    models.DDD.objects.bulk_create(objs, 10)

django的Form和ModeForm的作用?

 - 作用:
      - 对用户请求数据格式进行校验
      - 自动生成HTML标签
  - 区别:
      - Form,字段需要自己手写。
          class Form(Form):
              xx = fields.CharField(.)
              xx = fields.CharField(.)
              xx = fields.CharField(.)
              xx = fields.CharField(.)
      - ModelForm,可以通过Meta进行定义
          class MForm(ModelForm):
              class Meta:
                  fields = "__all__"
                  model = UserInfo                           
  - 应用:只要是客户端向服务端发送表单数据时,都可以进行使用,如:用户登录注册

django的Form组件中,如果字段中包含choices参数,请使用两种方式实现数据源实时更新。

1 方式一:重写构造方法,在构造方法中重新去数据库获取值

2   class UserForm(Form):

3       name = fields.CharField(label=‘用户名‘,max_length=32)

4       email = fields.EmailField(label=‘邮箱‘)

5       ut_id = fields.ChoiceField(

6           # choices=[(1,‘二B用户‘),(2,‘山炮用户‘)]

7           choices=[]

8       )

9       def __init__(self,*args,**kwargs):

10           super(UserForm,self).__init__(*args,**kwargs)

11           self.fields[‘ut_id‘].choices = models.UserType.objects.all().values_list(‘id‘,‘title‘)

12   方式二: ModelChoiceField字段

13   from django.forms import Form

14   from django.forms import fields

15   from django.forms.models import ModelChoiceField

16   class UserForm(Form):

17       name = fields.CharField(label=‘用户名‘,max_length=32)

18       email = fields.EmailField(label=‘邮箱‘)

19       ut_id = ModelChoiceField(queryset=models.UserType.objects.all())

20   依赖:

21       class UserType(models.Model):

22           title = models.CharField(max_length=32)

23           def __str__(self):

24               return self.title

43、django的Model中的ForeignKey字段中的on_delete参数有什么作用?

on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值

CASCADE:此值设置,是级联删除。

PROTECT:此值设置,是会报完整性错误。

SET_NULL:此值设置,会把外键设置为null,前提是允许为null。

SET_DEFAULT:此值设置,会把设置为外键的默认值。

SET():此值设置,会调用外面的值,可以是一个函数。

44、django中csrf的实现机制?

Django预防CSRF攻击的方法是在用户提交的表单中加入一个csrftoken的隐含值,这个值和服务器中保存的csrftoken的值相同,这样做的原理如下:

1、在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值

2、当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性

3、当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御

具体配置如下:

template中添加{%csrf_token%}标签

45、django如何实现websocket?

利用dwebsocket在Django中使用Websocket
https://www.cnblogs.com/huguodong/p/6611602.html

46、基于django使用ajax发送post请求时,都可以使用哪种方法携带csrf token?

https://www.cnblogs.com/wxp5257/p/7834090.html

Django的orm

ORM:Object?Relation Mapping(对象?关系映射)

实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面向对象编程,orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句,所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite……,如果数据库迁移,只需要更换Django的数据库引擎即可。

当前Python世界里最负盛名且最成熟的网络框架;已发展为应用最广泛的Python网络框架。Django的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统,但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。

Django遵守BSD版权

Django框架的特点

相对于其他Web框架,功能最完整,Django定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着Django模块之间紧密耦合,开发者需要学习Django自己定义的这一整套技术。

Django的主要特点:

完善的文档:经过10多年的发展和完善,Django有广泛的应用和完善的在线文档,开发者遇到问题时可以搜索在线文档寻求解决方案。

集成数据访问组件:Django的Model层自带数据库ORM组件,使开发者无须学习其他数据库访问技术(dbi、SQLAlchemy等)。
强大的URL映射技术:Django使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。
后台管理系统自动生成:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。
错误信息非常完整:在开发调试过程中如果出现运行异常,则Django可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置引用等,这样可以使开发者马上改正错误。

Django的组成结构

Django是遵循MVC架构的Web开发框架,主要由以下几部分组成:

管理工具(Management:一套内置的创建站点、迁移数据、维护静态文件的命令工具。
模型(Model:提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。
视图(View:Django的视图层封装了HTTPRequest和Response的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等。
模板(Template:是一套Django自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式。
表单(Form:通过内置的数据类型和控件生成HTML表单。
管理站(Admin:通过声明需要管理的Model,快速生成后台数据管理网站。

Django最初用来制作在线新闻Web站点,于2005年加入了BSD许可证家族,成为开源网络框架。Django根据比利时的爵士音乐家DjangoReinhardt命名,作者这样命名Django意味着Django能优雅地演奏(开发)功能丰富的乐曲(Web应用)。

它是当前Python世界里最负盛名且最成熟的网络框架。最初用来制作在线新闻的Web站点,目前已发展为应用最广泛的Python网络框架。Django的各模块之间结合得比较紧密,所以在功能强大的同时又是一个相对封闭的系统,但是其健全的在线文档及开发社区,使开发者在遇到问题时能找到解决方法。

Django框架的特点

相对于Python的其他Web框架,Django的功能是最完整的,Django定义了服务发布、路由映射、模板编程、数据处理的一整套功能。这也意味着Django模块之间紧密耦合,开发者需要学习Django自己定义的这一整套技术。Django的主要特点如下。

完善的文档:经过10多年的发展和完善,Django有广泛的应用和完善的在线文档,开发者遇到问题时可以搜索在线文档寻求解决方案。
集成数据访问组件:Django的Model层自带数据库ORM组件,使开发者无须学习其他数据库访问技术(dbi、SQLAlchemy等)。
强大的URL映射技术:Django使用正则表达式管理URL映射,因此给开发者带来了极高的灵活性。
后台管理系统自动生成:开发者只需通过简单的几行配置和代码就可以实现完整的后台数据管理Web控制台。
错误信息非常完整:在开发调试过程中如果出现运行异常,则Django可以提供非常完整的错误信息帮助开发者定位问题,比如缺少xxx组件的配置引用等,这样可以使开发者马上改正错误。

Django的组成结构

Django是遵循MVC架构的Web开发框架,其主要由以下几部分组成。

管理工具(Management:一套内置的创建站点、迁移数据、维护静态文件的命令工具。
模型(Model:提供数据访问接口和模块,包括数据字段、元数据、数据关系等的定义及操作。
视图(View:Django的视图层封装了HTTPRequest和Response的一系列操作和数据流,其主要功能包括URL映射机制、绑定模板等。
模板(Template:是一套Django自己的页面渲染模板语言,用若干内置的tags和filters定义页面的生成方式。
表单(Form:通过内置的数据类型和控件生成HTML表单。
管理站(Admin:通过声明需要管理的Model,快速生成后台数据管理网站。

 

django中如何实现orm表中添加数据时创建一条日志记录。

在settings.py中添加:
LOGGING = {
    ‘disable_existing_loggers‘: False,
    ‘version‘: 1,
    ‘handlers‘: {
        ‘console‘: {
            # logging handler that outputs log messages to terminal
            ‘class‘: ‘logging.StreamHandler‘,
            ‘level‘: ‘DEBUG‘, # message level to be written to console
        },
    },
    ‘loggers‘: {
        ‘‘: {
            # this sets root level logger to log debug and higher level
            # logs to console. All other loggers inherit settings from
            # root level logger.
            ‘handlers‘: [‘console‘],
            ‘level‘: ‘DEBUG‘,
            ‘propagate‘: False, # this tells logger to send logging message
                                # to its parent (will send if set to True)
        },
        ‘django.db‘: {
            # # django also has database level logging
            ‘handlers‘: [‘console‘],
            ‘level‘: ‘DEBUG‘,
            ‘propagate‘: False,
        },
    },
}

django缓存如何设置?

 三种粒度缓存
   1 中间件级别
       ‘django.middleware.cache.UpdateCacheMiddleware‘,
       ‘django.middleware.cache.FetchFromCacheMiddleware‘,
        CACHE_MIDDLEWARE_SECONDS=10
   2 视图级别
      from django.views.decorators.cache import cache_page
      @cache_page(15)
      def index(request):
          import time
          t=time.time()
          return render(request,"index.html",locals())

   3 局部缓存
      {% load cache %}
          ...          ...

      {% cache 15 "time_cache" %}
      <h3>缓存时间:{{ t }}</h3>
      {% endcache %}

django的缓存能使用redis吗?如果可以的话,如何配置?

pip install django-redis

  apt-get install redis-server
  然后在settings.py 里面添加CACHES = {
  ‘default‘: {
  ‘BACKEND‘: ‘redis_cache.cache.RedisCache‘,
  ‘LOCATION‘: ‘127.0.0.1:6379‘,
  "OPTIONS": {
  "CLIENT_CLASS": "redis_cache.client.DefaultClient",
  },
  }

django路由系统中name的作用?

name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个小名”,只要这个名字不变,网址变了也能通过名字获取到。

django的模板中filter和simple_tag的区别?

simple_tag 
    -参数任意,但是不能作为if条件判断的条件
  filter 
    -参数最多只能有两个,但是可以作为if条件判断的条件。

django-debug-toolbar的作用?

django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能。 
包括查看执行的sql语句,db查询次数,request,headers,调试概览等。 
https://blog.csdn.net/weixin_39198406/article/details/78821677

django中如何实现单元测试?

https://www.jianshu.com/p/34267dd79ad6

解释orm中 db first 和 code
first的含义?

datebase  first就是代表数据库优先,那么前提就是先创建数据库。
  model first就是代表model优先,那么前提也就是先创建model,然后根据model自动建立数据库。

django中如何根据数据库表生成model中的类?

Django附带一个名为inspectdb的实用程序,可以通过检查现有的数据库来创建Model(模型)

django的contenttype组件的作用?

django内置的ContentType组件就是帮我们做连表操作
如果一个表与其他表有多个外键关系,我们可以通过ContentType来解决这种关联
http://www.cnblogs.com/iyouyue/p/8810464.html

63、为什么要使用django rest framework框架?

1.客户端-服务端分离
优点:提高用户界面的便携性,通过简化服务器提高可伸缩性….
2.无状态(Stateless):从客户端的每个请求要包含服务器所需要的所有信息
优点:提高可见性(可以单独考虑每个请求),提高了可靠性(更容易从局部故障中修复),提高可扩展性(降低了服务器资源使用)
3.缓存(Cachable):服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的信息发送请求
优点:减少交互次数,减少交互的平均延迟
4.统一接口
优点:提高交互的可见性,鼓励单独改善组件
5.支持按需代码(Code-On-Demand 可选)
优点:提高可扩展性

64、django rest framework框架中都有那些组件?

- 路由,自动帮助开发者快速为一个视图创建4个url

            www.oldboyedu.com/api/v1/student/$
            www.oldboyedu.com/api/v1/student(?P<format>\w+)$    
            www.oldboyedu.com/api/v1/student/(?P<pk>\d+)/$
            www.oldboyedu.com/api/v1/student/(?P<pk>\d+)(?P<format>\w+)$
    - 版本处理
        - 问题:版本都可以放在那里?
                - url
                - GET 
                - 请求头
    - 认证 
        - 问题:认证流程?
    - 权限 
        - 权限是否可以放在中间件中?以及为什么?
    - 访问频率的控制
        - 匿名用户可以真正的防止?无法做到真正的访问频率控制,只能把小白拒之门外。
          如果要封IP,使用防火墙来做。
        - 登录用户可以通过用户名作为唯一标示进行控制,如果有人注册很多账号,也无法防止。
    - 视图
    - 解析器 ,根据Content-Type请求头对请求体中的数据格式进行处理。request.data
    - 分页
    - 序列化
        - 序列化
            - source
            - 定义方法
        - 请求数据格式校验
    - 渲染器

65、django rest framework框架中的视图都可以继承哪些类?

a. 继承 APIView

1   这个类属于rest framework中顶层类,内部帮助我们实现了只是基本功能:认证、权限、频率控制,但凡是数据库、分页等操作都需要手动去完成,比较原始。

2

3  class GenericAPIView(APIView)

4       def post(...):

5           pass

b. 继承 GenericViewSet(ViewSetMixin, generics.GenericAPIView)

如果继承它之后,路由中的as_view需要填写对应关系    .as_view({‘get’:’list’,’post’:’create’})
在内部也帮助我们提供了一些方便的方法:
- get_queryset
- get_object
- get_serializer

1   注意:要设置queryset字段,否则会跑出断言的异常。

2   # 只提供增加功能

3   class
TestView(GenericViewSet):

4      
serializer_class = XXXXXXX

5       def create(self,*args,**kwargs):

6          
pass # 获取数据并对数据进行操作

c. 继承 
- ModelViewSet
- mixins.CreateModelMixin,GenericViewSet
- mixins.CreateModelMixin,DestroyModelMixin,GenericViewSet

1   对数据库和分页等操作不用我们在编写,只需要继承相关类即可。

2   示例:只提供增加功能

3   class
TestView(mixins.CreateModelMixin,GenericViewSet):

4      
serializer_class = XXXXXXX

66、简述 django rest framework框架的认证流程。

如何编写?写类并实现authticate
方法中可以定义三种返回值:
(user,auth),认证成功
None , 匿名用户
异常 ,认证失败
流程:
dispatch
再去request中进行认证处理

67、django rest framework如何实现的用户访问频率控制?

a. 基于用户IP限制访问频率

b. 基于用户IP显示访问频率(利于Django缓存) 

c. view中限制请求频率

d. 匿名时用IP限制+登录时用Token限制

FBV和CBV?

django中请求处理方式有2种:FBV 和 CBV
FBV(function base views) 就是在视图里使用函数处理请求。
CBV(class base views)就是在视图里使用类处理请求 类需要继承view

django请求的生命周期?

前端请求—>nginx—>uwsgi.—>中间件—>url路由—->view试图—>orm—->拿到数据返回给view—->试图将数据渲染到模版中拿到字符串—->中间件—>uwsgi—->nginx—->前端渲染

django的内置组件?

url
、view、model、template、中间件

列举django中间件的5个方法?以及django中间件的应用场景?

process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_exception(self, request, exception)
process_response(self, request, response)

django的request对象是在什么时候创建的?

当请求一个页面时,Django会建立一个包含请求元数据的 HttpRequest 对象。 当Django 加载对应的视图时,HttpRequest 对象将作为视图函数的第一个参数。每个视图会返回一个HttpResponse 对象。

如何给CBV的程序添加装饰器?

from django.views import
View
from django.utils.decorators import
method_decorator

def auth(func):
    def inner(*args, **kwargs):
        return
func(*args, **kwargs)
    return inner

class UserView(View):
    @method_decorator(auth)
    def get(self, request, *args, **kwargs):
        return
HttpResponse(‘...‘)

列举django orm 中所有的方法(QuerySet对象的所有方法)

返回Query Set对象的方法有:
* all()
* filter()
* exclude()
* order_by()
* reverse()
* dictinct()

特殊的QuerySet:
* values()  返回一个可迭代的字典序列
* values_list() 返回一个可迭代的元祖序列

返回具体对象的:
* get()
* first()
* last()

返回布尔值的方法有:
* existe()

返回数学的方法有:
* count( )

only和defer的区别?

defer : 映射中排除某列数据
only : 仅取某个列中的数据

34、select_related和prefetch_related的区别?

select_related通过多表join关联查询,一次性获得所有数据,通过降低数据库查询次数来提升性能,但关联表不能太多,因为join操作本来就比较消耗性能
prefetch_related()的解决方法是,分别查询每个表,然后用Python处理他们之间的关系!
都是为了减少SQL查询的数量

35、filter和exclude的区别?

filter是查询满足条件的数据
exclude是查询不满足添加的数据

列举django orm中三种能写sql语句的方法。

#  1.使用execute执行自定义SQL
  # from django.db import connection, connections
  # cursor = connection.cursor()  # cursor =
connections[‘default‘].cursor()
  # cursor.execute("""SELECT * from auth_user where id =
%s""", [1])
  # row = cursor.fetchone()

#   2.使用extra方法

# extra(self, select=None,
where=None, params=None, tables=None, order_by=None, select_params=None)
  #    Entry.objects.extra(select={‘new_id‘: "select
col from sometable where othercol > %s"}, select_params=(1,))
  #    Entry.objects.extra(where=[‘headline=%s‘],
params=[‘Lennon‘])
  #    Entry.objects.extra(where=["foo=‘a‘ OR bar =
‘a‘", "baz = ‘a‘"])
  #    Entry.objects.extra(select={‘new_id‘: "select
id from tb where id > %s"}, select_params=(1,), order_by=[‘-nid‘])

#   3.使用raw方法
#     解释:执行原始sql并返回模型
#     说明:依赖model多用于查询
#     用法:
#       book =
Book.objects.raw("select * from hello_book")
#       for item in book:
#         print(item.title)123456789101112131415161718192021

django orm 中如何设置读写分离?

class
Router1:
    def allow_migrate(self, db, app_label, model_name=None, **hints):
       
if db
== ‘db1‘ and app_label == ‘app02‘:
            return True
        elif db
== ‘default‘ and app_label == ‘app01‘:
            return
True
        else:
            return
False
        # 如果返回None,那么表示交给后续的router,如果后续没有router,则相当于返回True

def db_for_read(self, model, **hints):
       
if model._meta.app_label
== ‘app01‘:
            return
‘default‘
        else:
            return
‘db1‘

def db_for_write(self, model, **hints):
       
if model._meta.app_label
== ‘app01‘:
            return
‘default‘
        else:
            return
‘db1‘

F和Q的作用?

F:操作数据表中的某列值,F( )允许Django在未实际链接数据的情况下具有对数据库字段的值的引用,不用获取对象放在内存中再对字段进行操作,直接执行原生产sql语句操作。

通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交

Q:对对象进行复杂查询,并支持&(and),|(or),~(not)操作符。

原文地址:https://www.cnblogs.com/qingaoaoo/p/12397208.html

时间: 2024-10-01 02:46:36

2、基于Python下的web框架之中最具有代表性的一个——Django的相关文章

Django框架介绍 python三大主流web框架之一

一.学习准备 1.下载安装Django(建议安装1.x版本) 方法:终端cmd输入命令:pip install django==1.11.11  然后回车即可 校验是否安装成功:django-admin 二.纯手撸web框架 1.纯手撸web框架 软件开发架构 c/s架构 b/s架构 本质bs也是cs web后端 需求: 1.根据用户输入不同的后缀返回不同的内容 从符合http协议格式的数据中获取用户输入的后缀 不足之处: 1.socket代码是我们自己写的 2.http数据也是我们自己处理的

python下的web服务器模块

python下的web服务模块有三种: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类 CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类. 下面是CGIHTTPServer类示例: 1 [email protected]:~/cp# tre

python 全栈 web框架 Django基本操作

django 操作总结! django框架安装: cmd安装: pip3 install django pycharm安装: 在python变量下 搜索 django 安装 创建django项目: cmd下创建django项目: 创建django程序: django-admin startproject mysite 进入程序目录: cd mysite 启动socket服务端,等待用户发送请求 IP 端口 python manage.py runserver 127.0.0.1:8080 pyc

符号执行-基于python的二进制分析框架angr

转载:All Right 符号执行概述 在学习这个框架之前首先要知道符号执行.符号执行技术使用符号值代替数字值执行程序,得到的变量的值是由输入变 量的符号值和常量组成的表达式.符号执行技术首先由King在1976年提出 ,经过三十多年的发展,现在仍然被广泛研究,它在软件测试和程序验证中发挥着重 要作用.符号执行是一种重要的形式化方法和静态分析技术,它使用数学和逻辑 首先定义一些基本概念.程序的路径(path)是程序的一个语句序列,这个 语句序列包括程序的一些顺序的代码片段,代码片段之间的连接是由

python 全栈 web框架 Django进阶

django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然基础已经了解,那就聊聊主流的东西. 一.web框架重新认知: 既然都是框架,那肯定是都包含了这些模块和对应的功能!但是不同框架之间也是有些诧异,毕竟封装的方法不同. Django: - 路由(url路由系统) - 视图(视图函数) - 模板(模版页面) - 数据库 ---> ORM(类-表:对象-行

ShutIt:一个基于 Python 的 shell 自动化框架

ShutIt是一个易于使用的基于shell的自动化框架.它对基于python的expect库(pexpect)进行了包装.你可以把它看作是"没有痛点的expect".它可以通过pip进行安装. Hello World 让我们从最简单的例子开始吧.创建一个名为example.py的文件: import shutit session = shutit.create_session('bash') session.send('echo Hello World', echo=True) 运行这

初识python轻量web框架flask

1.使用pip安装Python包 大多数Python包都使用pip实用工具安装,使用pyvenv创建的虚拟环境会自动安装pip. 1.使用pip安装Flask(其它Python包同理) pip install flask 2.一个简单的Demo from flask import Flask from flask import abort from flask import redirect app = Flask(__name__) @app.route('/') def index(): r

web请求响应过程与python主流三大web框架

web请求流程: 首先一个浏览器通过http协议发送一个请求,到我们的服务器,首先是wsgiref接收这个请求,并且解析这个请求中的数据,并将这个数据全部解析成一个env的大字典,wsgiref封装的就是socket连接和数据解析的功能,解析之后得到数据,就能知道浏览器的请求是什么,然后拿着请求类型和urls中的路由与视图函数映射关系获取到到低是要哪个视图,匹配成功之后,再到views.py的具体的视图中去,执行这个具体的特定的视图函数,这个视图函数在执行的过程中,需要首先到templates中

Python轻量Web框架Flask使用

http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask项目框架搭建 MVC模式实例开发 登录实例 Python语言近些年越来越火,其特点是开发迅速,语法简单,可移植等.本人就Python3基础语法写了Demo:https://github.com/tangthis/python3_demo,可以当作基础教程和手册查阅. Python Web开发框架常用