Learning Log项目学习笔记之一

《Python编程:从入门到实践》中Learning Log项目的学习记录

准备工作

新建项目文件夹learning_log

在CMD窗口中切换到目录learning_log

创建虚拟环境:python -m venv ll_env

激活虚拟环境:ll_env\scripts\activate

确认下Python版本:python --version

我用的是Python 3.10.8

安装Django:pip install Django

在Django中创建项目:django-admin startproject learning_log .

创建数据库:python manage.py migrate

启动服务器:python manage.py runserver

再打开一个新的CMD窗口,切换到manage.py文件所在目录,激活虚拟环境

创建应用程序:python manage.py startapp learning_logs

开始

定义模型

learning_log\learning_logs\models.py

from django.db import models

# Create your models here.

class Topic(models.Model):
    """用户学习的主题"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """返回模型的字符串表示"""
        return self.text

激活模型

learning_log\learning_log\settings.py

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 我的应用程序
    'learning_logs'
]

修改数据库

python manage.py makemigrations learning_logs

python manage.py migrate

Django管理网站

创建超级用户:python manage.py createsuperuser

Username:ll_admin

Password:ll_admin

向管理网站注册模型

learning_log\learning_logs\admin.py

from django.contrib import admin

# Register your models here.

from learning_logs.models import Topic

admin.site.register(Topic)

在127.0.0.1:8000/admin网站管理页面,添加主题Chess、Rock Climbing

定义模型Entry

learning_log\learning_logs\models.py

from django.db import models

# Create your models here.

class Topic(models.Model):
    """用户学习的主题"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """返回模型的字符串表示"""
        return self.text

class Entry(models.Model):
    """学到的有关某个主题的具体知识"""
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'entries'

    def __str__(self):
        """返回模型的字符串表示"""
        return self.text[:50] + "..."

再次迁移数据库

python manage.py makemigrations learning_logs

python manage.py migrate

向管理网站注册Entry

learning_log\learning_logs\admin.py

from django.contrib import admin

# Register your models here.

from learning_logs.models import Topic, Entry

admin.site.register(Topic)
admin.site.register(Entry)

创建网页:学习笔记主页

1、映射URL

learning_log\learning_log\urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('learning_logs.urls',namespace='learning_logs')),
]

在文件夹learning_logs中创建另一个urls.py

learning_log\learning_logs\urls.py

"""定义learning_logs的URL模式"""
from django.urls import path
from . import views

app_name = 'learning_logs'

urlpatterns = [
    # 主页
    path('', views.index, name='index')
]

2、编写视图

learning_log\learning_logs\views.py

from django.shortcuts import render

# Create your views here.

def index(request):
    """学习笔记的主页"""
    return render(request, 'learning_logs/index.html')

3、编写模板

在文件夹learning_logs中新建templates文件夹,在template文件夹中再新建learning_logs文件夹,在其中新建index.html

learning_log\learning_logs\templates\learning_logs\index.html

<p>Learning Log</p>
<p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p>

创建其他网页

创建父模板

learning_log\learning_logs\templates\learning_logs\base.html

<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a>
</p>

{% block content %}{% endblock content %}

子模板

重新编写index.html,使其继承base.html

learning_log\learning_logs\templates\learning_logs\index.html

{% extends "learning_logs/base.html" %}

{% block content %}
<p>Learning Log helps you keep track of your learning, for any topic you're learning about.</p>
{% endblock content %}

显示所有主题的页面

1、URL模式

learning_log\learning_logs\urls.py

"""定义learning_logs的URL模式"""
from django.urls import path
from . import views

app_name = 'learning_logs'

urlpatterns = [
    # 主页
    path('', views.index, name='index')
    # 显示所有的主题
    path('topics/', views.topics, name='topics'),
]

2、视图

learning_log\learning_logs\views.py

from django.shortcuts import render
from .models import Topic

# Create your views here.

def index(request):
    """学习笔记的主页"""
    return render(request, 'learning_logs/index.html')

def topics(request):
    """显示所有的主题"""
    topics = Topic.objects.order_by('date_added')
    context = {'topics':topics}
    return render(request, 'learning_logs/topics.html', context)

3、模板

learning_log\learning_logs\templates\learning_logs\topics.html

{% extends "learning_logs/base.html" %}

{% block content %}

<p>Topics</p>

<ul>
    {% for topic in topics %}
        <li>{{topic}}</li>
    {% empty %}
        <li>No topics have been added yet.</li>
    {% endfor %}
</ul>

{% endblock content %}

修改父模板,包含显示所有主题的页面链接

base.html

<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a> -
    <a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>

{% block content %}{% endblock content %}

显示特定主题的页面

1、URL模式

"""定义learning_logs的URL模式"""
from django.urls import path
from . import views

app_name = 'learning_logs'

urlpatterns = [
    # 主页
    path('', views.index, name='index'),
    # 显示所有的主题
    path('topics/', views.topics, name='topics'),
    # 特定主题的详细页面
    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、模板

{% extends 'learning_logs/base.html' %}

{% block content %}

    <p>Topic:{{topic}}</p>

    <p>Entries:</p>
    <p>
        <a href="{% url 'learning_logs:new_entry' topic.id %}">add new entry</a>
    </p>
    <ul>
    {% for entry in entries %}
        <li>
            <p>{{entry.date_added|date:'M d, Y H:i'}}</p>
            <p>{{entry.text|linebreaks}}</p>
            <p>
                <a href="{% url 'learning_logs:edit_entry' entry.id %}">edit entry</a>
            </p>
        </li>
    {% empty %}
        <li>
            There are no entries for this topic yet.
        </li>
    {% endfor %}
    </ul>

{% endblock content %}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆旅匆匆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值