python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目,第1张

概述文章目录Django项目:学习笔记web网页项目部署参考自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步。网站(后期会自定义):https://murmuring-escarpment-91471.herokuapp.com/Django项目:学习笔记web网页建立虚拟环境要使用Django,首先需要建立一

文章目录@H_502_8@@H_502_8@@H_502_8@Django项目:学习笔记web网页项目部署参考

自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步。

网站(后期会自定义):https://murmuring-escarpment-91471.herokuapp.com/

Django项目:学习笔记web网页

建立虚拟环境

要使用Django,首先需要建立一个虚拟工作环境。虚拟环境是系统的一个位置,可在其中安装包,并将之与其他Python包隔离。

为项目新建一个目录,将其命名为learning_log,再在终端中切换到这个目录,并执行如下命令创建一个虚拟环境

 python -m venv ll_env

这里运行了模块venv,并使用它创建了一个名为ll_env的虚拟环境。

激活虚拟环境

如果你使用的是windows系统,请使用命令

ll_env\Scripts\activate

要停止使用虚拟环境,可执行命令

deactivate

安装Django

激活虚拟环境后,执行如下命令安装Django:

 pip install django

在Django中新建项目

在虚拟环境依然处于活动状态的情况下(ll_env包含在圆括号内),执行如下命令新建一个项目

django-admin startproject learning_log .

注意:千万别忘了这个句点,否则部署应用程序时将遭遇一些配置问题。如果忘记了这个句点,要删除已创建的文件和文件夹(ll_env除外),再重新运行这个命令。

目录learning_log包含4个文件,最重要的是settings.py、urls.py和wsgi.py。

@H_502_8@文件settings.py指定Django如何与系统交互以及如何管理项目。在开发项目的过程中,我们将修改其中一些设置,并添加一些设置。文件urls.py告诉Django,应创建哪些页面来响应浏览器请求。文件wsgi.py帮助Django提供它创建的文件,这个文件名是Web服务器网关接口(Web server gatewayinterface)的首字母缩写。

创建应用程序

Django项目由一系列应用程序组成,它们协同工作让项目成为一个整体。

命令startapp appname让Django搭建创建应用程序所需的基础设施。

比如

 (ll_env)learning_log$ python manage.py startapp learning_logs

定义模型

模型告诉Django如何处理应用程序中存储的数据。在代码层面,模型就是一个类,就像前面讨论的每个类一样,包含属性和方法。

激活模型

要使用这些模型,必须让Django将前述应用程序包含到项目中。为此,打开settings.py(它位于目录learning_log/learning_log中),其中有个片段告诉Django哪些应用程序被安装到了项目中并将协同工作。

当需要修改“学习笔记”管理的数据时,都采取如下三个步骤:修改models.py,对learning_logs调用makemigrations,以及让Django迁移项目。

创建页面
使用Django创建页面的过程分三个阶段:定义URL,编写视图和编写模板。按什么顺序完成这三个阶段无关紧要,但在本项目中,总是先定义URL模式。

@H_502_8@URL模式描述了URL是如何设计的,让Django知道如何将浏览器请求与网站URL匹配,以确定返回哪个页面。每个URL都被映射到特定的视图——视图函数获取并处理页面所需的数据。视图函数通常使用模板来渲染页面,而模板定义页面的总体结构。

urls.py

"""定义learning_logs的URL模式"""from django.urls import pathfrom . import vIEwsapp_name = 'learning_logs'urlpatterns = [	# 主页	path('', vIEws.index, name='index'), ]

为指出当前位于哪个urls.py文件中,在该文件开头添加一个文档字符串。接下来,导入了函数path,因为需要使用它将URL映射到视图。我们还导入了模块vIEws,其中的句点让Python从当前urls.py模块所在的文件夹导入vIEws.py。变量app_name让Django能够将这个urls.py文件同项目内其他应用程序中的同名文件区分开来。在这个模块中,变量urlpatterns是一个列表,包含可在应用程序learning_logs中请求的页面。

实际的URL模式是对函数path()的调用,这个函数接受三个实参。第一个是一个字符串,帮助Django正确地路由(route)请求。收到请求的URL后,Django力图将请求路由给一个视图。为此,它搜索所有的URL模式,找到与当前请求匹配的那个。Django忽略项目的基础URL(http://localhost:8000/),因此空字符串(’’)与基础URL匹配。其他URL都与这个模式不匹配。如果请求的URL与任何既有的URL模式都不匹配,Django将返回一个错误页面。

path()的第二个实参指定了要调用vIEw.py中的哪个函数。请求的URL与前述正则表达式匹配时,Django将调用vIEw.py中的函数index()。第三个实参将这个URL模式的名称指定为index,让我们能够在代码的其他地方引用它。每当需要提供到这个主页的链接时,都将使用这个名称,而不编写URL。

第19章的部分成果

让用户拥有自己的数据

使用@login_required限制访问

Django提供了装饰器@login_required,让你能够轻松地只允许已登录用户访问某些页面。装饰器(decorator)是放在函数定义前面的指令,Python在函数运行前根据它来修改函数代码的行为。

将数据关联到用户

需将最高层的数据关联到用户,更低层的数据就会自动关联到用户。例如,在项目“学习笔记”中,应用程序的最高层数据是主题,而所有条目都与特定主题相关联。只要每个主题都归属于特定用户,就能确定数据库中每个条目的所有者。

部分成果:

第20章开始

项目部署

这里用的是《Python编程入门实践(第二版)》

requirements.txt内容:

asgiref==3.3.4beautifulsoup4==4.9.3Django==3.2django-bootstrap4==3.0.0django-heroku==0.3.1gunicorn==20.1.0psycopg2>=2.6.1pytz==2021.1soupsIEve==2.2.1sqlparse==0.4.1

注意:笔者刚开始git push heroku master的时候,老是报错,原来是因为某个文件中heroku写成了herocu,举例如下:

remote:          file "/tmp/build_b999a8c2/learning_log/settings.py", line 142, in <module>remote:            django_herocu.settings(locals())remote:        nameError: name 'django_herocu' is not definedremote:remote:  !     Error while running '$ python manage.py collectstatic --noinput'.remote:        See traceback above for details.remote:remote:        You may need to update application code to resolve this error.remote:        Or, you can disable collectstatic for this application:remote:remote:           $ heroku config:set disABLE_ColLECTSTATIC=1remote:remote:        https://devcenter.heroku.com/articles/django-assetsremote:  !     Push rejected, Failed to compile Python app.remote:remote:  !     Push Failedremote: Verifying deploy...remote:remote: !       Push rejected to vast-oasis-96898.remote:To https://git.heroku.com/vast-oasis-96898.git ! [remote rejected] master -> master (pre-receive hook declined)error: Failed to push some refs to 'https://git.heroku.com/vast-oasis-96898.git'

修改之后,使用命令git commit -am "一段话"重新commit。
然后执行git push heroku master,项目就部署好了。

remote: -----> $ python manage.py collectstatic --noinputremote:        128 static files copIEd to '/tmp/build_c3a2293e/staticfiles', 406 post-processed.remote:remote: -----> discovering process typesremote:        procfile declares types -> webremote:remote: -----> Compressing...remote:        Done: 73.9Mremote: -----> Launching...remote:        Released v5remote:        https://vast-oasis-96898.herokuapp.com/ deployed to Herokuremote:remote: Verifying deploy... done.To https://git.heroku.com/vast-oasis-96898.git * [new branch]      master -> master

核实正确地启动了服务器进程,请执行命令heroku ps:

(ll_env) PS D:\user\文档\python\python_work\learning_log> heroku ps【1】Free dyno hours quota remaining this month: 550h 0m (100%)Free dyno usage for this app: 0h 0m (0%)For more information on dyno sleePing and how to upgrade, see:https://devcenter.heroku.com/articles/dyno-sleePing【2】=== web (Free): gunicorn learning_logs.wsgi --log-file - (1)web.1: crashed 2021/04/15 16:54:59 +0800 (~ 5m ago)

输出指出了在接下来的一个月内,项目还可在多长时间内处于活动状态【1】。编写本书时,Heroku允许免费部署在一个月内最多有550小时处于活动状态。项目的活动时间超过这个限制后,将显示标准的服务器错误页面,我们稍后将定制这个错误页面。在【2】处,我们发现启动了procfile指定的进程。

heroku login 出现 Ip mismatch 怎么办? ,先Ctrl+C终止,然后输出

heroku login -i

然后会提示你输入heroku 的邮箱和密码,然后就登录进来。

然后输入 heroku open,结果出现Application error

解决方法:
输入heroku logs --tail
然后找到错误:显示找不到learning_logs.wsgi,果然,这是笔者的错误,正确的应该是learning_log.wsgi,多写了s,修改完procfile文件,然后重新提交。

修改后:

然后重新提交

(ll_env) PS D:\user\文档\python\python_work\learning_log> git statusOn branch masterChanges not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git restore <file>..." to discard changes in working directory)        modifIEd:   procfileno changes added to commit (use "git add" and/or "git commit -a")(ll_env) PS D:\user\文档\python\python_work\learning_log> git commit -am "procfile, modify learning_logs.wsgi into learning_log.wsgi"warning: LF will be replaced by CRLF in procfile.The file will have its original line endings in your working directory[master f5db365] procfile, modify learning_logs.wsgi into learning_log.wsgi 1 file changed, 1 insertion(+), 1 deletion(-)(ll_env) PS D:\user\文档\python\python_work\learning_log> git statusOn branch masternothing to commit, working tree clean(ll_env) PS D:\user\文档\python\python_work\learning_log>

然后重新部署到heroku

git push heroku master

然后继续执行:heroku open

大功告成


在Heroku上建立数据库

heroku run python manage.py migrat

果访问这个部署的应用程序,将能够像在本地系统上一样使用它,但看不到在本地部署中输入的任何数据(包括超级用户账户),因为它们还没有被复制到在线服务器。通常,不将本地数据复制到在线部署中,因为本地数据通常是测试数据。

你可分享“学习笔记”的Heroku URL,让任何人都可使用它。

目前自己搭建的网页的URL地址为 :https://murmuring-escarpment-91471.herokuapp.com/
然后注册了用户,写了自己的Learning Log。

参考

[1]埃里克·马瑟斯.Python编程-从入门到实践[M].北京:人民邮电出版社,2016

总结

以上是内存溢出为你收集整理的python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目全部内容,希望文章能够帮你解决python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1187454.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存