Django_ 学员管理后台系统开发 (二)

本贴最后更新于 1832 天前,其中的信息可能已经渤澥桑田

继上次的内容,我们继续 🚄

1.前端页面

view.py


from django.shortcuts import render

# Create your views here.

def index(request):

words = 'Hi,guys'

return render(request, 'index.html', context={'words':words})

定义了函数 index,接受 request 参数(这是对用户发过来的 http 请求的封装)

render 函数顾名思义,即将内容渲染到模版

index.html 就是 templates 模版,Django 会在每个在 settings 里面注册的应用中寻找当前应用的模版,顺序是自上而下,所以这边我们自己手动建立一个 templates 文件夹,并在里面创建 index.html,内容如下:

index.html


<html>

<head>

<title>学员管理平台-by mufengs</title>

</head>

<body>

2019 {{ words }}

</body>

</html>

这边的{{ words }}就是取 view.py 那边 words 的值

urls.py

配置访问路由规则


from django.conf.urls import url

from django.contrib import admin

from django.urls import path

from student_sys.views import index

urlpatterns = [

url(r'^$', index, name='index'),

path('admin/', admin.site.urls),

]

访问:http://127.0.0.1:8000/

就会出现下面的输出内容了
image.png

2.操作数据库

通过操作数据库,将内容渲染到页面上

修改 view.py


from django.shortcuts import render

from .models import Student

# Create your views here.

def index(request):

students = Student.objects.all()

return render(request, 'index.html', context={'students':students})

从数据库中取出学员信息,接下来修改我们的模版


<html>

<head>

<title>学员管理平台-by mufengs</title>

</head>

<body>

<ul>

{% for student in students %}

<li>{{ student.name }} - {{ student.get_status_display }}</li>

{% endfor %}

</ul>

</body>

</html>

这边发现上次文章中的一个问题,注册 app 的时候写错了,所以这边一直报错过不去


RuntimeError: Model class student_sys.models.Student doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

因为表是空的,所以页面打开是空白的

接下来我们来实现提交功能,创建一个 form.py 和 view.py 同级


from django import forms

from .models import Student

# 方法一

# class StudentForm(forms.Form):

# name = forms.CharField(label='name', max_length=128)

# sex = forms.ChoiceField(label='sex', choices=Student.SEX_ITEMS)

# profession = forms.CharField(label='profession', max_length=128)

# email = forms.EmailField(label='email', max_length=128)

# qq = forms.CharField(label='qq', max_length=128)

# phone = forms.CharField(label='phone', max_length=128)

#

# 方法二

class StudentForm(forms.ModelForm):

class Meta:

model = Student

fields = (

'name', 'sex', 'profession',

'email', 'phone', 'qq'

)

这边用了两种方法来实现,很明显第二种方法更方便

加入表单验证

最后的视图部分代码如下

views.py


from django.http import HttpResponseRedirect

from django.shortcuts import render

from django.urls import reverse

from student_sys.form import StudentForm

from .models import Student

# Create your views here.

def index(request):

students = Student.get_all()

if request.method == 'POST':

form = StudentForm(request.POST)

if form.is_valid():

# cleaned_data = form.cleaned_data

# student = Student()

# student.name = cleaned_data['name']

# student.sex = cleaned_data['sex']

# student.email = cleaned_data['email']

# student.profession = cleaned_data['profession']

# student.qq = cleaned_data['qq']

# student.phone = cleaned_data['phone']

# student.save()

form.save()

return HttpResponseRedirect(reverse('index'))

else:

form = StudentForm()

context = {

'students': students,

'form': form

}

return render(request, 'index.html', context=context)

模版文件如下


<html>

<head>

<title>学员管理平台-by mufengs</title>

</head>

<body>

<h3><a href="/admin/">Admin</a></h3>

<ul>

{% for student in students %}

<li>{{ student.name }} - {{ student.get_status_display }}</li>

{% endfor %}

</ul>

<form action="/" method="post">

{% csrf_token %}

{{ form }}

<input type="submit" value="Submit" />

</form>

</body>

</html>

又到了最后的效果时间了,曾经有人和我说过,做开发最开心的时候,做出一个功能,是有一种别人理解不了的成就感

当然我不是一个开发,我也没有所谓的成就感,只是兴趣使然,做自己喜欢的事情

后台

image.png
前台

image.png

今天就搞这些吧,还需要多理解多消化,盲目的跟着书本敲代码,也没多大用处

@lizhongyue248 你那个问题就一个标签的事情,没有那么复杂啊,聊天发不了标签 @88250 ,所以这边顺便给你看下我的

<amp-auto-ads type="adsense"
              data-ad-client="xxx">
</amp-auto-ads>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="xxx"
     data-ad-slot="xxx"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
  • Django
    47 引用 • 72 回帖 • 4 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    536 引用 • 672 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
yuanhenglizhen
笔落兴亡定三端之妙,墨写清白尽六艺之奥

推荐标签 标签

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20156 引用 • 77717 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 82 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 523 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 4 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 140 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 510 回帖 • 1 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 353 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 624 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    5 引用 • 62 回帖
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 613 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 1 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • gRpc
    11 引用 • 9 回帖 • 49 关注
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 632 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7017 引用 • 31714 回帖 • 220 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 648 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    923 引用 • 936 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 330 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 187 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖 • 1 关注