基于Django的Python应用——学习笔记

简介: 基于Django的Python应用——学习笔记

环境:Python3.11

         Django5.0.1

一、建立项目

创建虚拟环境

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

python -m venv ll_env

项目列表生成了这样的一个文件夹

然后激活虚拟环境

ll_env\Scripts\activate

控制台前方出现高亮即为成功

创建并激活虚拟环境后,就可安装Django了:

pip install Django

新建项目

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

django-admin.py startproject learning_log

此时,出现一个名叫learning_log的文件夹。

创建数据库

python manage.py migrate

此时Django 又创建了一个文件 ——db.sqlite3

下面来核实 Django 是否正确地创建了项目。为此,可执行命令 runserver

python manage.py runserver

点击链接,出现这个页面即为成功。

二、创建应用程序

当前,在前面打开的终端窗口中应该还运行着 runserver 。请再打开一个终端窗口(或标签页),并切换到 manage.py 所在的目录。激活该虚拟环境,再执行命令 startapp

python manage.py startapp learning_logs

将看到其中新增了一个文件夹 learning_logs

定义模型

打开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] + "..."

激活模型

打开settings.py

请将 INSTALLED_APPS 修改成下面这样

# 我的应用程序
    'learning_logs',

接下来,需要让 Django 修改数据库,使其能够存储与模型 Topic 相关的信息。为此,在终端窗口中执行下面的命令:

python manage.py makemigrations learning_logs

输出表明 Django 创建了一个名为 0001_initial.py 的迁移文件,这个文件 将在数据库中为模型Topic 创建一个表。

下面来应用这种迁移,让 Django 替我们修改数据库:

python manage.py migrate

每当需要修改 学习笔记 管理的数据时,都采取如下三个步骤:

修改models.py;

对learning_logs 调用makemigrations ;

让Django迁移项目。

创建超级用户

在控制台输入:

python manage.py createsuperuser

根据提示输入信息

注册模型

我们创建应用程序 learning_logs 时, Django models.py 所在的目录中创建了一个名为 admin.py 的文件:

from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)
from learning_logs.models import Entry
admin.site.register(Entry)

现在,使用超级用户账户访问管理网站:访问 http://localhost:8000/admin/ ,并输入你刚创建的超级用户的用户名和密码

添加主题

书中提供的信息如下:

The opening is thefirst part ofthe game, roughly thefirst tenmoves or so. In the opening, it'sa good ideato do threethings— bring out your bishopsand knights, try to controlthecenter ofthe

board,and castle your king. (国际象棋的第一个阶段是开局,大致是前 10 步左右。在开局阶段,最好做三件事情:将象和马调出来;努力控制棋盘的中间区域;用车将王

护住。)

Ofcourse, thesearejust guidelines. It will beimportant to learnwhen to followthese guidelinesand when to disregard thesesuggestions. (当然,这些只是指导原则。学习什么情况下遵

守这些原则、什么情况下不用遵守很重要。)

再来创建一个国际象棋条目,并创建一个攀岩条目,以提供一些初始数据。下面是第二个国际象棋条目。

In the opening phase ofthe game, it's important to bring out your bishopsand knights. These piecesare powerfuland maneuverableenough to play asignificant rolein the beginningmoves ofa

game. (在国际象棋的开局阶段,将象和马调出来很重要。这些棋子威力大,机动性强,在开局阶段扮演着重要角色。)

下面是第一个攀岩条目:

One ofthe most importantconcepts in climbing is to keep your weight on your feetas much as possible. There'sa myth thatclimberscan hang all day on theirarms. In reality, good climbers have

practiced specific ways of keeping their weight over their feet whenever possible. (最重要的攀岩概念之一是尽可能让双脚承受体重。有谬误认为攀岩者能依靠手臂的力量坚持一

整天。实际上,优秀的攀岩者都经过专门训练,能够尽可能让双脚承受体重。)

三、创建网页

映射url

打开项目主文件夹 learning_log 中的文件urls.py,我们需要包含 learning_logs URL

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('learning_logs.urls', namespace='learning_logs')),
    # url(r'', include('learning_logs.urls', namespace='learning_logs')), # Django2.0使用djang.urls.path
]

现在我们需要在文件夹 learning_logs 中创建另一个 urls.py 文件:

"""定义learning_logs的URL模式"""
from django.urls import path
#从当前的urls.py模块所在的文件夹中导入视图
from . import views
#变量urlpatterns是一个列表,包含可在应用程序learning_logs中请求的网页
app_name = 'learning_logs'
urlpatterns = [
  #主页
  #第一个是正则表达式,r让Python将接下来的字符串视为原始字符串,引号正则表达式始于和终于何处
  #第二个实参指定了要调用的视图函数
  #第三个实参将这个URL模式的名称指定为index
  path(r'',views.index,name='index'),
  # 显示所有的主题
  path(r'topics/', views.topics, name='topics'),
  # 特定主题的详细页面
  path(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
  ]

编写视图

learning_logs 中的文件 views.py 是你执行命令 python manage.py startapp 时自动生成的

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)
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)

编写模板

按顺序新建文件夹以及四个页面

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a>-
    <a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% 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 %}
</body>
</html>

topic.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Topic: {{ topic }}</p>
<p>Entries:</p>
 <ul>
     {% for entry in entries %}
<li>
    <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
    <p>{{ entry.text|linebreaks }}</p>
</li>
     {% empty %}
<li>
There are no entries for this topic yet.
</li>
{% endfor %}
{% endblock content %}
</ul>
</body>
</html>

topics.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Topics</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Topics</p>
<ul>
    {% for topic in topics %}
    <li>
        <a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a>
    </li>
    {% empty %}
<li>No topics have been added yet.</li>
     {% endfor %}
</ul>
{% endblock content %}
</body>
</html>

四、效果

点击Topics

点击Chess

相关文章
|
28天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
64 3
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
65 3
|
6天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
46 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
1月前
|
缓存 开发者 Python
深入探索Python中的装饰器:原理、应用与最佳实践####
本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
40 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
9天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
43 0
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
68 8
|
2月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
2月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####