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


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

    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测试
    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端路径
    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]
      python项目
    • 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. 简单的前端
  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/Howbin/p/12558156.html
Copyright © 2020-2023  润新知