第18章——从Django入手
作者:互联网
建立项目
建立虚拟环境 python -m venv ll_env
激活虚拟环境 ll_env/Scripts/activate
(停止 deactivate)
安装Django pip install django
在Django 中创建项目 django-admin startproject learning_log
创建数据库 pythonv manage.py migrate
查看项目 python manage.py runserver (Ctrl + C 关闭)
创建应用程序
另开一个终端,切换到manage.py 所在目录,激活虚拟环境
python manage.py startapp learning_logs
定义模型 Topic(类), 属性:text, date_added, 方法 __str__
激活模型 配置 settings.py "Installed_app"中添加“learning_logs”
修改数据库
python manage.py makemigrations learning_logs (在migration下自动创建0001_initial.py,在数据库中为Topic创建一个表)
python manage.py migrate (Applying)
修改管理数据的三个步骤: 修改models.py——对 learning_logs 调用makemigrations——让Django 迁移项目
Django管理网站
1、创建超级用户 python manage.py createsuperuser
2、向管理网站注册模型 admin.py
from .models import Topic
admin.site.register(Topic)
(可访问 https://localhost:8000/admin/. 输入用户名和密码,可修改添加用户和用户组,管理Topic相关的数据)
3、添加主题
创建Chess 和 Rock Climbing 两个主题
新增模型 Entry (条目)
属性:topic, text, date_added, 嵌套Meta 类, 方法__str__
注册模型 Entry
新增3个条目
Django shell 交互环境 python manage.py shell 启动 python 解释器
from learning_logs.models import Topic
topics = Topic.objects.all()
for topic in topics:
print(topic.id, topic)
t = Topic.objects.get(id=1)
t.text
t.date_added
t.entry_set.all() 通过外键获取数据 相关模型的小写名称、下划线和单词 set
创建页面:
学习笔记主页
创建页面三个阶段:定义URL、编写视图和编写模板。
定义URL
映射URL:在 learning_log/urls.py path('admin/', admin.site.urls)
添加 from django.urls import path, include
path('', include('learning_logs.urls'))
新建 learning_logs/urls.py 定义learning_logs 的URL模式
from django.urls import path
from . import views
app_name = 'learning_logs'
url-patterns = [
# 主页
path('', views.index, name = 'index')
]
编写视图 learning_logs/views.py
def index(request):
""学习笔记的主页。""
return render(request, 'learning_logs/index.html')
编写模板 learning_log/learning_logs/templates/learning_logs/index.html
创建其他页面
模板继承
父模板 base.html
模板标签 {% url 'learning_logs: index '%} 命名空间
HTML链接用锚标签定义: <a href= "link_url">link text</a>
块标签: {% block content %} {% endblock content %}
子模板 index.html
{% extends "learning_logs/base.html" %}
显示所有主题的页面
1、URL模式
显示所有主题的URL http://localhost:8000/topics/
修改learning_logs/urls.py
#添加显示所有主题。 path('topics', views.topics, name='topics')
2、视图
修改learning_logs/views.py
from .models import Topic
def topics(request):
"显示所有的主题。""
topics = Topic.objects.order_by('date_added')
context = {'topics': topics} # 发送给模板的上下文
return render(request, 'learning_logs/topics.html', context)
3、模板 topics.html
项目列表为无序列表, <u1></u1>
循环 {% for item in list %}
do something with each item
{% endfor %}
{{ 模板变量 }}
<1i></1i> 一个项目列表项,在<u1></u1>内部
<% empty %> 列表为空时的处理
修改父模板 base.html
<a href="{% url 'learning_logs: index' %}">Learning Log</a> -
<a href="{% url 'learning_logs: topics'%}">Topics</a>
显示特定主题的页面
1、url 模式 learning_logs/urls.py
path('topics/<int:topic_id>/', views.topic, name='topic') # 特定主题的详细页面
2、视图 views.py
def topic(request, topic_id):
'''显示单个主题及其所有的条目‘’‘
topic = Topic.objects.get(id=topic_id)
entries = topic.entry_set.order_by('-date_added') # -表示指定降序
context = {'topic': topic, 'entries': entries}
return render(request, 'learning_logs/topic.html', context)
3、模板
竖线(|)表示模板过滤器 {{ entry.date_added | date: 'M d, Y H:i '}}
{entry.text | linebreaks } 将包含换行符的长条目转换为浏览器能够理解的格式
4、将显示所有主题的页面中的主题设置为链接
修改topics.html
<a/ href = "{% url 'learning_logs: topic' topic.id%}">{{ topic }}</a>
标签:Topic,logs,入手,18,topics,py,Django,topic,learning 来源: https://www.cnblogs.com/no-one-me/p/14992295.html