![python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目,第1张 python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目,第1张](/aiimages/python%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%5Bpython%E7%BC%96%E7%A8%8B%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E8%B7%B5%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0%28%E8%BF%9E%E8%BD%BD%E4%B8%89%29%5D%EF%BC%9Adjango%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0web%E9%A1%B9%E7%9B%AE.png)
自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步。
网站(后期会自定义):https://murmuring-escarpment-91471.herokuapp.com/
建立虚拟环境
要使用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模式。
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章开始
项目部署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项目所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)