django的基本架构Python的Web框架中,Django无疑是最有代表性的重量级选手,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构(系统中的组件分为模型(Model)、视图(View)和控制器(Controller)三个部分并借此实现模型(数据)和视图(显示)的解耦合。)提供了支持(Django中称之为MTV架构。django的架构思想是MTV, Model、Template、views,views和django本身完成了controller的功能,model完成数据的功能,Template完成了显示的功能,即页面内容。初始化一个django项目后会生成以下文件:hellodjango/__init__.py:空文件,告诉Python解释器这个目录应该被视为一个Python的包。hellodjango/settings.py:Django项目的配置文件。hellodjango/urls.py:Django项目的URL映射声明,就像是网站的“目录”。hellodjango/wsgi.py:项目运行在WSGI兼容Web服务器上的入口文件。manage.py: 管理Django项目的脚本程序。创建自己的django应用:python manage.py startapp first :__init__.py:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。admin.py:可以用来注册模型,用于在Django框架自带的管理后台中管理模型。apps.py:当前应用的配置文件。migrations:存放与模型有关的数据库迁移信息。__init__.py:一个空文件,告诉Python解释器这个目录应该被视为一个Python的包。models.py:存放应用的数据模型(MTV中的M)。在 Django 中,manage.py 是一个命令行工具,用于执行各种 Django 相关的任务,如创建数据库、运行开发服务器、执行数据迁移、创建超级用户等。以下是一些 manage.py 常用的命令:runserver: 启动 Django 开发服务器。makemigrations: 根据模型的更改,创建新的迁移文件。migrate: 应用所有未应用的数据库迁移。createsuperuser: 创建一个超级用户账户。startapp: 创建一个新的 Django 应用程序。test: 运行测试套件。tests.py:包含测试应用各项功能的测试类和测试函数。views.py:处理用户HTTP请求并返回HTTP响应的函数或类(MTV中的V)。前后端如何实现通信前端发送请求:前端页面通过 URL 发送请求到后端 Django 应用程序。请求可以是 GET 请求或 POST 请求。Django 后端处理请求:Django 后端接收到前端发送的请求后,根据 URL 和请求方法来确定要调用的视图函数。视图函数处理请求:视图函数是 Django 应用程序的核心,它处理来自前端的请求,并根据需要从数据库中获取数据,对数据进行处理,并返回给前端。后端返回响应:视图函数将处理后的数据以 JSON、XML、HTML 或其他格式返回给前端。前端处理响应:前端页面接收到后端返回的数据后,可以将数据显示到页面上,或者根据数据进行下一步操作。在 Django 中,前端页面可以使用 Django 提供的模板语言进行渲染,或者使用前端框架(如 Vue、React 等)与 Django 后端进行交互。当使用模板语言进行渲染时,Django 将动态生成 HTML 页面,并将渲染后的页面返回给前端。如果使用前端框架进行交互,则可以通过 AJAX 发送请求并接收响应,从而实现动态更新页面内容的效果。用户追踪实现方式以及用户登陆验证CSRF:为了防止跨站请求,django的模板中可以添加token,如果请求的时候没有添加token就会收到403 forbidden的错误指令。大多数的web网站都要追踪用户数据,判断用户的登录状态,以此达到用户留存的目的。在服务器端,记住用户的方式最简单的办法就是创建一个对象用来存储用户信息,这个对象就是session,session是跟随HTTP请求的,但是http请求是无连接(每次请求和响应的过程中,服务器一旦完成对客户端请求的响应之后就断开连接)、无状态(客户端再次发起对服务器的请求时,服务器无法得知这个客户端之前的任何信息)的协议,即使服务器通过session保存了用户数据,也需要一个东西来将session和用户对应起来,也就是session id,我们通过session ID,这样就能找到相对应的session完成用户追踪了。存储session id有以下几种方式:URL重写。直接将session id放在url中作为参数存储。隐藏域(隐式表单域)。在提交表单的时候,可以通过在表单中设置隐藏域向服务器发送额外的数据。例如:<input type="hidden" name="sessionid" value="123456">session id存储在浏览器本地的cookie、local storage、sessionStorage、IndexedDB等里面。Django对于session的支持默认的配置文件settings.py文件中已经激活了一个名为SessionMiddleware的中间件。这个中间件中包含了对session的操作和对cookie的操作函数。默认情况下,django会将session的信息保存在mysql数据库中,但是大量的session数据存在本地会导致性能瓶颈,所以更好的做法是使用nosql,将session数据存储在redis这种Nosql数据库中。session过期时间可以通过session_cookie_age 来设置时间,也可以使用SESSION_EXPIRE_AT_BROWSER_CLOSE = True,设置只要关闭浏览器窗口session就过期。cookie 的存储和cookie的替代品在视图函数中读写cookieDjango封装的HttpRequest和HttpResponse对象分别提供了读写cookie的操作。HttpRequest封装的属性和方法:COOKIES属性 - 该属性包含了HTTP请求携带的所有cookie。get_signed_cookie方法 - 获取带签名的cookie,如果签名验证失败,会产生BadSignature异常。HttpResponse封装的方法:set_cookie方法 - 该方法可以设置一组键值对并将其最终将写入浏览器。set_signed_cookie方法 - 跟上面的方法作用相似,但是会对cookie进行签名来达到防篡改的作用。因为如果篡改了cookie中的数据,在不知道密钥的情况下是无法生成有效的签名,这样服务器在读取cookie时会发现数据与签名不一致从而产生BadSignature异常。需要说明的是,这里所说的密钥就是我们在Django项目配置文件中指定的SECRET_KEY。激活SessionMiddleware之后,每个HttpRequest对象都会绑定一个session属性,它是一个类似字典的对象,除了保存用户数据之外还提供了检测浏览器是否支持cookie的方法,包括:set_test_cookie方法 - 设置用于测试的cookie。test_cookie_worked方法 - 检测测试cookie是否工作。delete_test_cookie方法 - 删除用于测试的cookie。set_expiry方法 - 设置会话的过期时间。get_expire_age/get_expire_date方法 - 获取会话的过期时间。clear_expired方法 - 清理过期的会话。cookie的替代品在实际开发中是不会在cookie中保存用户的敏感信息(如用户的密码、信用卡的账号等)的,而且保存在cookie中的数据一般也会做好编码和签名的工作。对于支持HTML5的浏览器来说,可以使用localStorage和sessionStorage做为cookie的替代方案,相信从名字上你就能听出二者的差别,存储在localStorage的数据可以长期保留;而存储在sessionStorage的数据会在浏览器关闭时会被清除 。
点赞 0
评论 1
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务