基于Django的Python应用—学习笔记—功能完善

这篇具有很好参考价值的文章主要介绍了基于Django的Python应用—学习笔记—功能完善。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、让用户可以输入信息

创建forms.py

创建基于表单的页面的方法几乎与前面创建网页一样:定义一个 URL ,编写一个视图函数并编写一个模板。一个主要差别是,需要导入包含表单 的模块forms.py
基于Django的Python应用—学习笔记—功能完善,笔记
from django import forms
from .models import Topic,Entry
class TopicForm(forms.ModelForm):
    class Meta:
        model = Topic
        fields = ['text']
        labels = {'text': ''}

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['text']
        labels = {'text': ''}
        widgets = {'text': forms.Textarea(attrs={'cols': 80})}

将其添加到

learning_logs/urls.py中:

基于Django的Python应用—学习笔记—功能完善,笔记
"""定义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'),
	# 用于添加新主题的网页
	path(r'^new_topic/$', views.new_topic, name='new_topic'),
	# 用于添加新条目的页面
	path(r'^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'),
	# 用于编辑条目的页面
	path(r'^edit_entry/(?P<entry_id>\d+)/$', views.edit_entry,name='edit_entry'),
	]

增加视图函数

learning_logs/views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
# 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)
def new_topic(request):
    """添加新主题"""
    if request.method != 'POST':
        # 未提交数据:创建一个新表单
        form = TopicForm()
    else:
        # POST提交的数据,对数据进行处理
        form = TopicForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topics'))
    context = {'form': form}
    return render(request, 'learning_logs/new_topic.html', context)
def new_entry(request, topic_id):
    """在特定的主题中添加新条目"""
    topic = Topic.objects.get(id=topic_id)
    if request.method != 'POST':
        # 未提交数据,创建一个空表单
        form = EntryForm()
    else:
        # POST提交的数据,对数据进行处理
        form = EntryForm(data=request.POST)
        if form.is_valid():
            new_entry = form.save(commit=False)
            new_entry.topic = topic
            new_entry.save()
            return HttpResponseRedirect(reverse('learning_logs:topic',
                                                args=[topic_id]))
    context = {'topic': topic, 'form': form}
    return render(request, 'learning_logs/new_entry.html', context)
def edit_entry(request, entry_id):
    """编辑既有条目"""
    entry = Entry.objects.get(id=entry_id)
    topic = entry.topic
    if request.method != 'POST':
        #   初次请求,使用当前条目填充表单
        form = EntryForm(instance=entry)
    else:
        # POST提交的数据,对数据进行处理
        form = EntryForm(instance=entry, data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('learning_logs:topic', args=[topic.id]))
    context = {'entry': entry, 'topic': topic, 'form': form}
    return render(request, 'learning_logs/edit_entry.html', context)

二、创建模板

新增三个模板

基于Django的Python应用—学习笔记—功能完善,笔记

edit_entry.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>
<p>Edit entry:</p>
 <form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
   <button name="submit">save changes</button>
</form>
{% endblock content %}
</body>
</html>

new_entry.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</a></p>
<p>Add a new entry:</p>
<form action="{% url 'learning_logs:new_entry' topic.id %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name='submit'>add entry</button>
</form>
{% endblock content %}
</body>
</html>

new_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>Add a new topic:</p>
 <form action="{% url 'learning_logs:new_topic' %}" method='post'>
     {% csrf_token %}
     {{ form.as_p }}
     <button name="submit">add topic</button>
</form>
{% endblock content %}
</body>
</html>

在页面topics 中添加它们的链接:

基于Django的Python应用—学习笔记—功能完善,笔记

<!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>
<a href="{% url 'learning_logs:new_topic' %}">Add a new topic:</a>

{% endblock content %}
</body>
</html>

在页面topic中添加它们的链接:

基于Django的Python应用—学习笔记—功能完善,笔记
<!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>
<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 %}

{% endblock content %}
</ul>
</body>
</html>

三、运行效果

基于Django的Python应用—学习笔记—功能完善,笔记文章来源地址https://www.toymoban.com/news/detail-807618.html

点击Topics

基于Django的Python应用—学习笔记—功能完善,笔记

点击Add a new topic,可以增加Topic

基于Django的Python应用—学习笔记—功能完善,笔记

返回结果:

基于Django的Python应用—学习笔记—功能完善,笔记

点击Chess

基于Django的Python应用—学习笔记—功能完善,笔记

再点击增加new  nentry,输入信息,点击添加

基于Django的Python应用—学习笔记—功能完善,笔记

返回结果:

基于Django的Python应用—学习笔记—功能完善,笔记

点击edit entry,修改内容

基于Django的Python应用—学习笔记—功能完善,笔记

如图:输入修改的信息,点击save changes 保存修改

基于Django的Python应用—学习笔记—功能完善,笔记

返回结果:

基于Django的Python应用—学习笔记—功能完善,笔记

到了这里,关于基于Django的Python应用—学习笔记—功能完善的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用qt完善对话框功能

    1、 完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。

    2024年02月07日
    浏览(52)
  • 【Python_PyQtGraph 学习笔记(六)】基于GraphicsLayoutWidget 实现 曲线对象PlotDataItem 隐藏功能

    通过GraphicsLayoutWidget 可以绘制多条曲线。如果绘制多条曲线后,既想保存多条曲线的数据,又想显示其中一条曲线或几条曲线应该如何实现呢? 首先想通过GraphicsLayoutWidget 类提供的方法实现,但是PlotItem图形对象和PlotDataItem曲线对象都没有提供曲线的隐藏方法; 通过查看其源

    2023年04月08日
    浏览(56)
  • 交友项目【完善用户信息&上传用户头像】功能跳转首页

    目录 1:保存用户信息 1.1:接口地址 1.2:流程分析 1.3:代码实现 2.4: 测试 2:上传用户头像 2.1:接口地址 2.2:流程分析 2.3:代码实现 2.4:测试 在进行完手机号码校验完毕之后,我们会进入完善用户信息页面   启动虚拟机:首次登录---完善资料 http://192.168.136.160:3000/proj

    2023年04月12日
    浏览(45)
  • Django学习笔记:第二章django的安装和创建应用

    终端运行 查看django是否安装成功 在控制台运行 在特定文件夹内打开终端运行 生成 进入上图的Scripts文件夹内,打开终端 先正常安装VSCode 再安装python插件 安装Django插件,搜索django,安装前两个 特点 功能完善,开发速度快,安全性强 有完善的在线文档 模型自带数据库ORM组件

    2024年02月16日
    浏览(48)
  • MFC第十九天 记事本项目功能完善和开发、CTabCtrl类与分页模式开发

    获取选择的文字 向下查找 查找替换功能 向下 向上 不区分大小写的 替换当前选中 替换全部 打开查找编辑框需要加载的 CFileDialog 构造函数详解 pch.h CApp NotePad.cpp 对编码的解析 以及对编码格式的转换 CMainDlg.h CMainDlg.cpp CMainDlg.h CMainDlg.cpp CFileDialogXq.h CFileDialogXq.cpp CMainDlg.h CMai

    2024年02月16日
    浏览(49)
  • qt实现信息管理系统(学生信息管理系统)功能更完善

    信息系统代码地址:https://gitee.com/dxl96/StdMsgSystem 本学生信息管理系统同升级改造的幅度较大,涉及到的东西对于初学者来说,可能稍显复杂,可以先移步到 https://blog.csdn.net/IT_CREATE/article/details/82027462 查看简易的系统。 本系统引入日志管理,数据库选择支持sqllite、mysql,自

    2024年02月13日
    浏览(47)
  • Android RecyclerView实现购物车功能(完善详解篇-保姆级教程)

    购物车实现图片: 首先新建model 随便一个名字 ,例如ShoppingCart 功能一: RecyclerView布局的实现 ①创建MainActivity ②在MainActivity布局中添加RecyclerView组件 ◼ 布局位置在layout中如图位置: recyclerview如图中间部分: (注:其他布局可自己通过拖动组件实现) ◼ activity_main.xml的布局

    2024年02月04日
    浏览(124)
  • 【Python_PyQtGraph 学习笔记(三)】基于GraphicsLayoutWidget实现显示曲线对象 鼠标位置处坐标的功能

    在PyQtGraph的官方例程中有此功能的实现,可参考Crosshair / Mouse interaction;但是坐标值的变化是超过整数时才变化,不符合实际开发中要求的精度。 在实现该功能的过程中主要参考了(详细分析)如何使用pyqt5和pyqtgraph在图像上增加图例并显示鼠标位置处的变量值,但是在获取

    2024年02月09日
    浏览(60)
  • 【Python_PyQtGraph 学习笔记(三)】基于GraphicsLayoutWidget实现显示曲线对象鼠标位置处坐标的功能

    在PyQtGraph的官方例程中有此功能的实现,可参考Crosshair / Mouse interaction;但是坐标值的变化是超过整数时才变化,不符合实际开发中要求的精度。 在实现该功能的过程中主要参考了(详细分析)如何使用pyqt5和pyqtgraph在图像上增加图例并显示鼠标位置处的变量值,但是在获取

    2024年02月07日
    浏览(48)
  • 安装包UI美化之路-Electron打包出界面美观,功能完善的安装包,这三步就够了

    这篇文章应该说是《安装包UI美化之路-nsNiuniuSkin安装包制作可视化配置向导》的延伸与进一步应用,在可视配置的基础之上,生成供electron-builder打包的脚本! 一直有朋友反馈,不知道如何将nsNiuniuSkin与Electron打包结合起来;我综合整理了一下,大家的担心无外乎以下几点:

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包