# learning_log
Create a Learning Log Website
# 使用Django开发LearningLog项目
>以下是我在学习《Python编程:从入门到实践》一书时开发LearningLog项目的学习笔记。搭建好的网站在:https://evilgenius.herokuapp.com/。
-------------------------------------------
2018.11.5更新:
优化了网站显示页面,增加「站点精选」导航栏。
1. 网站首页
![网站首页预览](http://pic.yupoo.com/dxmdmw/1ac87f23/380b0544.jpg)
2. 网站截图
![网站截图1](http://pic.yupoo.com/dxmdmw/e62aacf5/3a509ef7.jpg)
![网站截图2](http://pic.yupoo.com/dxmdmw/160deb9c/139fa97b.jpg)
![网站截图3](http://pic.yupoo.com/dxmdmw/6b6f91b7/bd88df50.jpg)
-------------------------------------------
2018.10.26更新:
1. 未登录用户现在可以查看「公开」的主题和条目。
2. 支持markdown编辑模式!感谢Django-mdeditor,django-markdown-deux!
-------------------------------------------
## 1. 建立项目
### 1.1 制定规范
- 以规范的范式描述项目目标、功能、外观、用户界面
编写一个名为「学习笔记」的Web应用程序,让用户能够记录感兴趣的主题,并在学习每个主题的过程中添加日志条目。「学习笔记」的主页对这个网站进行描述,并邀请用户注册或登录。用户登录后,就可创建新主题、添加新条目以及阅读既有的条目。
--------------------------------
## 2. 建立虚拟环境
### 2.1 新建目录「learning_log」
### 2.2 终端切换到此目录,创建虚拟环境
```py
learning_log> python -m venv 11_env
```
如遇到Python版本低或系统未正确设置,无法使用模块venv,可安装virtualenv包:
```py
> pip install --user virtualenv
```
然后在终端切换到目录learning_log,并创建虚拟环境:
```py
>learning_log> virtualenv 11_env
```
### 2.3 激活虚拟环境
```py
>learning_log>11_env\Scripts\activate
```
### 2.4 安装Django
(11_env)learning_log> pip install Django
### 2.5 在Django中创建项目
```py
(11_env)learning_log> django-admin startproject learning_log .
```
注意命令末尾的句点,它让新项目使用合适的目录结构,这样开发完成后可轻松地将应用程序部署到服务器。
目录learning_log会包含4个文件:
- \_\_init__.py
- settings.py :指定Django如何与系统交互以及如何管理项目,开发过程中会在其中修改与添加。
- urls.py:告诉Django应创建哪些网页来响应浏览器请求。
- wsgi.py:帮助Django提供它创建的文件。web server gateway interface(Web服务器网关接口)。
### 2.6 创建数据库
```py
(11_env)learning_log>python manage.py migrate
```
### 2.7 运行并查看项目
```py
(11_env)learning_log> python manage.py runserver
```
浏览器地址输入:http://localhost:8000/ 或
http://127.0.0.1:8000/
如果出现错误消息,改为runserver 8001端口往上测试到可用端口为止
-----------------------------------
## 3. 创建应用程序
(11_env)learning_log> python manage.py startapp learning_logs
这一步会创建:
· models.py
· admin.py
· views.py
### 3.1 定义模型
用户需要在学习笔记中创建多主题,输入的每个条目都与特定主题相连,条目以文本方式显示。还要存储每个条目的时间戳,以便告诉用户条目创建时间。
模型告诉Django如何处理应用程序中存储的数据。模型=类,包含属性和方法。
```py
from django.db import models
class Topic(models.Model):
'''用户学习的主题'''
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
'''返回模型的字符串表示'''
return self.text
```
### 3.2 激活模型
通过learning_log>settings.py告诉Django哪些应用程序安装在项目中。
打开learning_log>settings.py:
```py
--snip--
INSTALLED_APPS = [
--snip--
# 我的应用程序
'learning_logs',
]
--snip--
```
### 3.3 修改数据库,使能储存新模型
(11_env)learning_logs> python manage.py makemigrations learning_logs
### 3.4 应用迁移
(11_env)learning_logs>python manage.py migrate
------------------------------------
## 4. Django管理网站
### 4.1 创建超级用户
(11_env)learning_logs>python manage.py createsuperuser
### 4.2 向管理网站注册模型
通过learning_logs>admin.py向管理网站注册Topic:
```py
from django.contrib import admin
# 导入要注册的模型Topic
from learning_logs.models import Topic
# 让Django通过管理网站管理模型
admin.site.register(Topic)
```
-------------------------
## 5. 完善应用程序
### 5.1 定义模型Entry
为用户添加的条目定义模型,多条目可关联到同一主题。
### 5.2 迁移模型Entry
(11_env)learning_log> python manage.py makemigrations learning_logs
(11_env)learning_log> python manage.py migrate
### 5.3 向管理网站注册模型Entry
修改 admin.py,使用
admin.site.register(Entry)
-----------------------------------------
## 6. Django shell
使用交互式终端测试项目和排除其故障。
### 6.1 启动一个Python解释器
(11_env)learning_log> python manage.py shell
### 6.2 导入模块learning_logs.models中的模型Topic
from learning_logs.models import Topic
### 6.3 使用方法Topic.objects.all()获取模型Topic的所有实例
Topic.objects.all()
### 6.4 遍历返回的查询集(queryset)
```py
topics = Topic.objects.all()
for topic in topics:
print(topic.id, topic)
```
### 6.5 知道对象的ID后,就可获取该对象并查看其属性
```py
t = Topic.objects.get(id=1)
t.text
t.date_added
# 通过外键获取数据,使用相关模型的小写名称+下划线+set
t.entry_set.all()
```
### 6.6 小结
在简单的shell环境中排除故障币网页文件中容易得多,需要熟悉Django语法,ctrl+z 后回车退出。
----------------------------------------
## 7. 创建网页:学习笔记主页
### 7.1 映射URL
URL模式让Django知道如何将浏览器请求与网站URL匹配,以确定返回哪个网页,每个URL被映射到特定的视图。
1. 项目主文件夹learning_log中的urls.py:
```py
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls)),
# 我们需要包含learning_logs的URL
path('', include('learning_logs.urls', namespace='learning_logs')),
]
```
2. 在应用文件夹learning_logs中创建另一个urls.py文件:
```py
'''定义learning_logs的URL模式'''
from django.urls import path
from . import views
app_name = 'learning_logs'
urlpatterns = [
# 主页
path('', views.index, name='index'),
]
```
### 7.2 编写视图
视图函数获取并处理网页所需的数据,通常调用一个模板生成浏览器能理解的网页。
1. 应用learning_logs中的views.py
```py
from django.shortcuts import render
def index(request):
'''学习笔记的主页'''
return render(request, 'learning_logs/index.html')
```
URL请求与定义的模式匹配时,Django将在文件views.py中查找函数index(),再将请求对象传递给这个视图函数。这里向函数render()提供了两个实参:原始请求对象以及一个可用于创建网页的模板。
### 7.3 编写模板
模板定义网页的结构,网页被请求时,Django将填入相关的数据。
在文件夹learning_logs中新建一个文件夹templates,在templates中再新建一个文件夹learning_logs。在最里面的文件夹learning_logs中,新建一个文件index.html,内容如下:
```html
<p>Learning Log</p>
<p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p>
```
-------------------------------------
## 8. 创建其他网页
### 8.1 父模板
在index.html所在目录创建base.html,顶端标题通用:设置为到主页的链接
```html
<p>
<a href="{% url 'learning_logs:index' %}>Learning Log</a>
</p>
{% blo
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 Python毕业设计-基于Django和 Bootstrap的学习笔记网站的设计与实现+使用说明+全部资料(优秀项目)Python毕业设计-基于Django和 Bootstrap的学习笔记网站的设计与实现+使用说明+全部资料(优秀项目)Python毕业设计-基于Django和 Bootstrap的学习笔记网站的设计与实现+使用说明+全部资料(优秀项目) 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕设项目、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 3、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
Python毕业设计-基于Django和 Bootstrap 3 搭建的学习笔记网站的设计与实现+使用说明+全部资料(优秀项目).zip (58个子文件)
learning_log-master
users
__init__.py 0B
tests.py 60B
admin.py 63B
migrations
__init__.py 0B
apps.py 85B
models.py 57B
templates
users
register.html 508B
login.html 502B
urls.py 430B
views.py 1KB
.vscode
settings.json 78B
learning_log
__init__.py 0B
templates
500.html 133B
404.html 140B
wsgi.py 436B
urls.py 1KB
settings.py 4KB
static
placeholder.txt 146B
manage.py 544B
runtime.txt 12B
Procfile 45B
requirements.txt 389B
uploads
editor
金马奖_20181026162219985277.png 76KB
.gitignore 30B
learning_logs
__init__.py 0B
tests.py 60B
admin.py 225B
migrations
__init__.py 0B
0006_remove_topic_public.py 333B
0007_topic_public.py 393B
0001_initial.py 558B
0009_topic_topic_hide.py 394B
0004_topic_public.py 385B
0002_entry.py 804B
0003_topic_owner.py 615B
0011_auto_20181102_1445.py 396B
0005_auto_20181024_2240.py 399B
0010_examplemodel.py 606B
0008_entry_entry_hide.py 390B
apps.py 100B
models.py 1KB
templates
images
image.jpg 19KB
code.jpg 66KB
note.jpeg 19KB
learning_logs
new_topic.html 599B
edit_entry.html 589B
topics.html 773B
my_topics.html 767B
topic.html 1KB
base.html 2KB
index.html 2KB
new_entry.html 600B
urls.py 1KB
tools.py 221B
views.py 4KB
forms.py 375B
README.md 46KB
171265889347208773632.zip 416B
共 58 条
- 1
资源评论
不走小道
- 粉丝: 3340
- 资源: 5059
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 包含 Andrei Neagoie 的《从零到精通掌握编码面试 - 数据结构 + 算法》课程的所有代码示例,使用 Python 语言 .zip
- 数据库课程设计(图书馆管理系统)springboot+swing+mysql+mybatis
- C++ Vigenère 密码(解密代码)
- zblog日收站群,zblog泛目录
- C++ Vigenère 密码(加密代码)
- Vue Router 是 Vue 生态系统的一部分,是一个 MIT 许可的开源项目,其持续开发完全在赞助商的支持下成为可能 支持 Vue 路由器
- PM2.5 数据集 包含上海、成都、广州、北京、沈阳五地的PM2.5观测,csv文件
- 电动汽车与软件定义汽车(SDV)时代的汽车行业数字化转型
- C的两数相加求和的程序代码
- 使用特定版本的 Python 设置 GitHub Actions 工作流程.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功