基于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

相关文章
|
5天前
|
分布式计算 Python
Python函数式编程学习笔记
高阶函数是能接收另一个函数作为参数的函数,如Python的map()、reduce()和filter()。map()将传入的函数应用到序列每个元素并返回迭代器,如将整数列表转换为字符串列表。reduce()对序列进行累积计算,例如求和。filter()根据给定函数返回的真值保留或丢弃序列元素,常用于筛选。sorted()函数支持自定义排序,如按绝对值或ASCII值排序。此外,还包括返回函数、匿名函数(lambda)、装饰器(用于动态增强函数功能)和偏函数(partial),用于固定函数部分参数,简化调用。
9 1
|
2天前
|
网络协议 Python
Python 网络编程实战:构建高效的网络应用
【5月更文挑战第18天】Python在数字化时代成为构建网络应用的热门语言,因其简洁的语法和强大功能。本文介绍了网络编程基础知识,包括TCP和UDP套接字,强调异步编程、数据压缩和连接池的关键作用。提供了一个简单的TCP服务器和客户端代码示例,并提及优化与改进方向,鼓励读者通过实践提升网络应用性能。
19 6
|
2天前
|
缓存 监控 安全
Django框架在大型Web应用中的架构设计与实战
【5月更文挑战第18天】Django框架在构建大型Web应用中扮演重要角色,采用分层架构(数据、业务逻辑、表示层)和多应用组织模式,结合缓存策略(如Memcached、Redis)提升性能。通过异步处理、分布式部署提高响应速度和扩展性。关注数据分区、安全设计及监控日志,确保系统高效、稳定。Django为复杂业务提供坚实基础,助力打造卓越Web系统。
19 7
|
2天前
|
开发框架 中间件 数据库
Django 框架入门全攻略:轻松构建 Web 应用
【5月更文挑战第18天】本文是 Django 入门教程,介绍了如何使用 Django 构建 Web 应用。内容包括安装、项目与应用创建、模型定义、数据库迁移、视图编写、路由配置、模板系统、表单处理和中间件的使用。通过实例展示了 Django 基本流程,帮助初学者快速上手。Django 提供高效工具,便于开发者聚焦业务逻辑,轻松构建功能丰富的 Web 应用。
19 5
|
2天前
|
数据可视化 数据挖掘 数据处理
Python中的数据可视化技术及应用
数据可视化是数据分析中至关重要的一环,而Python作为一种强大的编程语言,提供了丰富的数据可视化工具和库。本文将介绍Python中常用的数据可视化技术及其在实际应用中的案例,帮助读者更好地理解和运用数据可视化技术。
|
2天前
|
缓存 Python
Python中的装饰器应用及实践
Python中的装饰器是一种强大的编程工具,它可以在不更改原函数代码的情况下,对函数进行扩展和修改。本文将介绍装饰器的基本概念,探讨其在Python开发中的实际应用,并结合示例代码进行详细解析。
|
2天前
|
缓存 测试技术 Python
Python中的装饰器应用探究
在Python编程中,装饰器是一种强大而灵活的工具,它可以用于修改、包装和增强函数或方法的行为。本文将深入探讨Python中装饰器的应用,包括装饰器的基本概念、实际应用场景以及一些高级技巧,帮助读者更好地理解和运用这一重要的编程技术。
|
2天前
|
人工智能 数据可视化 数据挖掘
Python中的数据可视化技术与应用
随着数据科学和人工智能的迅速发展,数据可视化在Python编程中变得愈发重要。本文将介绍Python中常用的数据可视化库及其应用,以及如何利用这些工具创建各种引人入胜的数据图表。
|
3天前
|
网络协议 数据处理 调度
深入探索Python异步编程:asyncio库的应用与实践
在现代软件开发中,异步编程已成为处理并发和I/O密集型任务的重要策略。本文将带您深入探索Python的asyncio库,解析其背后的设计原理,并通过实例展示如何在实际项目中应用asyncio实现高效的异步编程。我们不仅会探讨asyncio的基本用法,还会分析其性能优势,并探讨其与其他并发模型的比较。此外,文章还将涵盖asyncio在Web开发、网络编程和数据处理等场景中的应用案例,帮助您更好地理解并掌握这一强大的异步编程工具。
|
4天前
|
监控 调度 开发者
Python 中的异步编程:理解 asyncio 库的基本原理与应用
本文将深入探讨 Python 中的异步编程技术,重点介绍 asyncio 库的基本原理与应用。通过解释事件循环、协程和 Future 对象的概念,读者将能够理解异步编程的工作原理,并学会如何利用 asyncio 库提高程序的性能和效率。本文还将通过实际示例演示如何使用 asyncio 库来处理 I/O 密集型任务和 CPU 密集型任务,以及如何避免常见的陷阱和错误。