<<Python编程:从入门到实践>>踩坑记 Django

Django Python

19.1.1.5 模板new_topic

做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常。

个人采用的开发环境是virtual studio code , 测试起来很是难受,因为我配置的debug环境,断点操作没有作用。

经过我不断的测试,才发现我失败的原因是由于之前的误操作,先建立new_pizzas.py后改为new_pizzas.html的,错误就在这里。在我之后新建了my_new_pizzas.html后,测试成功了。



这个过程真的是很痛苦啊,奇怪的错误真的是有很多。

19.2 创建用户账户

登录成功后不能跳转到 pizzas:index

<input type=“hidden” name=“next” value="{% url ‘pizzas:index’ %}>

上面这句话不能够起作用,登录成功后仍然是会调转到:

http://127.0.0.1:8000/accounts/profile/



经过网上不断查证:

观看了博友的文章后:

https://www.cnblogs.com/quicksnow/p/4649737.html

受到了启发:

在项目 setting.py 添加

LOGIN_REDIRECT_URL = 'pizzas:index’

具体这种用法可以参考《反向解析URL》

https://www.liujiangblog.com/course/django/136

部署项目

部署参考

主要参考这篇文章

https://blog.csdn.net/qq_41590417/article/details/80509098

https://blog.csdn.net/xing851483876/article/details/84306953

部署步骤

简要的梳理安装的步骤,重点是所遇到的错误以及解决方法。

项目文件

  1. 拷贝本地项目到服务器Linu端
  2. 配置数据库
  3. 连接数据库
  4. 运行项目在服务器 localhost
  5. 使用 curl 测试本地项目是否运行成功


curl测试

6. 注意 MySQL数据库可能会报错:

django2.2/mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is 		required; you have 0.9.3

可以参考

https://blog.csdn.net/weixin_33127753/article/details/89100552

修改可能需要Ubuntu端路径

服务器端 nginx、uWSGI的安装

参考文章:

基本知识

  • web服务器和web框架

    web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。Nginx就是一个web服务器,Django或flask就是web框架。
  • WSGI协议

    只要web服务器和web框架满足WSGI协议,它们就能相互搭配。所以WSGI只是一个协议,一个约定。而不是python的模块、框架等具体的功能。
  • wsgi.py

    django项目携带的一个wsgi接口文件

    如果项目名叫project_name的话,此文件就位于[project_name/project_name/wsgi.py]

  • uWSGI

    实现了WSGI协议的一个web服务器。即用来接受客户端请求,转发响应的程序。实际上,一个uWSGI的web服务器,再加上Django这样的web框架,就已经可以实现网站的功能了
  • Nginx

    一个普通的个人网站,访问量不大的话,当然可以由uWSGI和Django构成。但是一旦访问量过大,客户端请求连接就要进行长时间的等待。这个时候就出来了分布式服务器,我们可以多来几台web服务器,都能处理请求。但是谁来分配客户端的请求连接和web服务器呢?Nginx就是这样一个管家的存在,由它来分配。这也就是由Nginx实现反向代理,即代理服务器。

参考

wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。
利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了; uwsgi:同WSGI一样是一种通信协议
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与WSGI相比是两样东西。 uWSGI :一种python web server或称为Server/Gateway
uWSGI类似tornadoweb或者flup,是一种python web server,uWSGI是实现了uwsgi和WSGI两种协议的Web服务器,负责响应python 的web请求。
因为apache、nginx等,它们自己都没有解析动态语言如php的功能,而是分派给其他模块来做,比如apache就可以说内置了php模块,让人感觉好像apache就支持php一样。
uWSGI实现了wsgi协议、uwsgi协议、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

项目流程 这个是很重要的

首先客户端请求服务资源,
nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi,
wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
wsgi将返回值进行打包,转发给uWSGI,
uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换

这个也是很重要的

1. 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
2. 在nginx上加上安全性或其他的限制,可以达到保护程序的作用;
3. uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;
4. django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。

一点说明

看了很多人部署的文章,但是他们都没有说明,最后需不需使用

    python manage.py runserver 8000

来运行项目,答案是不需要。

不需要在个,项目就可以运行的。

最后的坑

注意 Linux 路径下 文件的下级目录用‘/’来表示,window好像不做严格区分‘\’‘/’都可以

如果出现404错误,可以检查项目、应用的 views.py。把‘\’替换掉就可以了。

下一步学习

  1. 学生管理系统
  2. 简单的前端

最新文章

  1. 浅谈SQL Server中的三种物理连接操作
  2. Lind.DDD.Repositories.Mongo层介绍
  3. lua OOP实现对象的链式调用
  4. typedef用法
  5. mysql 转义字符和php addslashes
  6. 【Linux/Ubuntu学习3】解决ubuntu解压windows生成的zip文件时乱码问题
  7. 对XSD schema文件中elementFormDefault属性的理解
  8. 日常API之C#百度人脸识别
  9. 201521123052《Java程序设计》第1周学习总结
  10. 使用BEM命名规范来组织CSS代码
  11. gulp前端自动化构建并上传oss
  12. python--第二十四天总结
  13. java键盘中输入q退出
  14. libunistring-0.9.9
  15. Spring Boot @Autowired 没法自动注入的问题
  16. sql语句——根据身份证号提取省份、出生日期、年龄、性别。
  17. swift中,Optional、?与!之间的关系
  18. vim加密文件
  19. gcc 内联汇编
  20. 2.1 The Object Model -- Classes and Instances(类和实例)

热门文章

  1. Win10桌面点鼠标右键一直转圈的解决方法
  2. .Net最小工作线程对应用程序性能的影响
  3. 小白之Python-基础中的基础05
  4. vue3 门户网站搭建7-eslint
  5. Android Studio Gradle 输出信息乱码
  6. docker 安装 elasticsearch7.6.2 kibana7.6.2
  7. Influxdb客户端使用
  8. PowerShell学习笔记一_cmdlet、管道、如何入门
  9. .Net Core 中使用NLog替代默认日志
  10. 微信h5支付报错 商家参数格式有误,请联系商家解决