iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >实战Django:Rango Part3
  • 253
分享到

实战Django:Rango Part3

实战DjangoRango 2023-01-31 01:01:48 253人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

 这一节我们将要给RanGo项目设计两个表单:添加分类表单和添加页面表单。14.Part2练习答案我们先来创建about视图,编辑rango/views.py文件,在文件尾部加入如下内容:rango/views.py:def about(r

 

这一节我们将要给RanGo项目设计两个表单:添加分类表单和添加页面表单。

14.Part2练习答案


我们先来创建about视图,编辑rango/views.py文件,在文件尾部加入如下内容:

rango/views.py:

def about(request):return render(request,'rango/about.html')

接下来在templates/rango文件夹下新建一个about.html文件,加入如下内容:

rangoproject/templates/rango/about.html

<!DOCTYPE html><html><head><title>Rango</title></head><body><h1>关于Rango</h1>欢迎访问Rango!<br/>这是一张Rango的图片!<br/>{% load static %}<img src="{% static "rango.jpg" %}" alt="Rango" /></body></html>

随后编辑rango/urls.py文件,把urlpatterns部分变成这样:

rango/urls.py:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'),
    url(r'^about/$', views.about, name='about'),
)

最后别忘了给index.html加上一个“关于”的链接,在</body>前插入这样一行代码:

rangoproject/templates/rango/index.html

<a href="/rango/about/">关于</a><br/>

去浏览器里刷一下首页,看下效果吧!

15.创建分类表单


我们需要让用户可以提交页面和分类的信息,要完成这项功能,可以借助Django强大的表单处理功能。

首先在rango文件夹下创建一个fORMs.py文件,加入如下内容:

rango/forms.py:

from django import formsfrom rango.models import Page, Categoryclass CategoryForm(forms.ModelForm):
    name = forms.CharField(max_length=128, help_text="请输入分类名称:")
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    slug = forms.CharField(widget=forms.HiddenInput(), required=False)# 下面这个子类提供给表单一些额外的信息.class Meta:# 指定当前类关联到哪个模型,使用哪些字段model = Category
        fields = ('name',)class PageForm(forms.ModelForm):
    title = forms.CharField(max_length=128, help_text="请输入页面标题:")
    url = forms.URLField(max_length=200, help_text="请输入页面链接:")
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)class Meta:# 指定关联到Page模型model = Page# 我们的表单中需要哪些字段?# 下面这个方法告诉我们,不需要选择每一个字段,# 有些字段允许使用空值,所以我们可以把它排除掉,# 比如说category字段,我们直接把它排除掉exclude = ('category',)#或者我们直接填写想要用到的字段(除了category字段),象下面这样写:#fields = ('title', 'url', 'views')

随后我们来创建一个叫add_category的视图,编辑rango/views.py 文件,先在文件头部插入一行代码:

rango/views.py

from rango.forms import CategoryForm

再添加如下内容:

rango/views.py

def add_category(request):# 检测是否用POST方法提交的if request.method == 'POST':
        form = CategoryForm(request.POST)# 提交的表单是否有效的?if form.is_valid():# 将这个新分类存入数据库.form.save(commit=True)# 调用index()视图.# 页面将跳转到首页.return index(request)else:# 若表单包含错误,则在终端显示错误信息.print(form.errors)else:# 如果不是用POST方法提交,则显示表单,供用户输入信息.form = CategoryForm()return render(request, 'rango/add_category.html', {'form': form})

接下来在templates/rango文件夹下新建一个add_category.html文件,加入如下内容:

rangoproject/templates/rango/add_category.html

<!DOCTYPE html><html><head><title>Rango</title></head><body><h1>添加分类</h1><form id="category_form" method="post" action="/rango/add_category/">{% csrf_token %}
            {% for hidden in form.hidden_fields %}
                {{ hidden }}
            {% endfor %}

            {% for field in form.visible_fields %}
                {{ field.errors }}
                {{ field.help_text }}
                {{ field }}
            {% endfor %}<input type="submit" name="submit" value="创建分类" /></form></body></html>

然后编辑rango/urls.py文件,把urlpatterns部分变成这样:

rango/urls.py:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'),
    url(r'^about/$', views.about, name='about'),
    url(r'^add_category/$', views.add_category, name='add_category'), 
)

最后一步,让我们给index.html加上一个“添加分类”的链接,在</body>前插入这样一行代码:

rangoproject/templates/rango/index.html

<a href="/rango/add_category/">添加分类</a><br />

看下效果,我们先在分类名称后面输入“emagic”,再点击”创建分类“按钮,程序会自动跳转回首页,你可以看到,”emagic”这个分类已经成功添加:

8

注意啊,如果你一次性添加多个分类,这些分类不一定会显示在首页上,因为我们对首页作了限制,最多只能显示5个分类。

 

Tips:关于中文分类名的添加

目前,当你添加中文分类名时,将无法正常访问对应的链接,这是由于slugify函数不能对中文名称进行别名处理,而且受Category模型的save函数限制,我们也无法在管理界面中手动修改别名。你可以这样做:

先修改Category模型的save函数,把它改为:

rango/models.py:

    def save(self, *args, **kwargs):if slugify(self.name):
            self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

就是加一个判断,只有在slugify(self.name)能将name转换时,才使用slugify转换过的别名,否则的话,使用你手工输入的别名。

改完模型后,当你在表单中输入中文分类时,只要在管理界面中手工修改别名,就可以让Rango支持中文分类名了。

 

16.创建页面表单


我们来添加一个叫add_page的视图,编辑rango/views.py 文件,先在文件头部插入一行代码:

rango/views.py

from rango.forms import PageForm

再添加如下内容:

rango/views.py

def add_page(request, category_name_slug):try:
        cat = Category.objects.get(slug=category_name_slug)except Category.DoesNotExist:
        cat = None    if request.method == 'POST':
        form = PageForm(request.POST)if form.is_valid():if cat:
                page = form.save(commit=False)
                page.category = cat
                page.views = 0
                page.save()# 页面跳转到这里更妥一些.return category(request, category_name_slug)else:print(form.errors)else:
        form = PageForm()

    context_dict = {'form':form, 'category': cat}    return render(request, 'rango/add_page.html', context_dict)

接下来在templates/rango文件夹下新建一个add_page.html文件,加入如下内容:

rangoproject/templates/rango/add_page.html

<!DOCTYPE html><html><head><title>Rango</title></head><body><h1>添加页面</h1>
    {% if not category_name_url %}
        The specified category does not exist!<br/>{% else %}      <form id="page_form" method="post" action="/rango/category/`category_name_url`/add_page/">  {% csrf_token %}
          {% for hidden in form.hidden_fields %}
          {{ hidden }}
          {% endfor %}

          {% for field in form.visible_fields %}
          {{ field.errors }}<br/>  {{ field.help_text}}
          {{ field }}
          {% endfor %}          <br/>  <input type="submit" name="submit" value="创建页面"/>  </form>{% endif %}                </body></html>

然后编辑rango/urls.py文件,把urlpatterns部分变成这样:

rango/urls.py:

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category'),
    url(r'^about/$', views.about, name='about'),
    url(r'^add_category/$', views.add_category, name='add_category'), 
    url(r'^category/(?P<category_name_slug>\w+)/add_page/$', views.add_page, name='add_page'),
)

最后一步,让我们给category.html加上一个“添加页面”的链接,在</body>前插入这样一行代码:

rangoproject/templates/rango/category.html

<a href="/rango/category/{{ category_name_slug }}/add_page/">添加页面</a><br/>

这样,我们就把添加页面的表单做好了,你可以打开任意一个分类,点击“添加页面”的链接,就可以看到如下的效果:

1

 

 

【未完待续】

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!  
作者:舍得  
首发:舍得学苑@博客园

 

--结束END--

本文标题: 实战Django:Rango Part3

本文链接: https://www.lsjlt.com/news/183373.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实战Django:Rango Part3
     这一节我们将要给Rango项目设计两个表单:添加分类表单和添加页面表单。14.Part2练习答案我们先来创建about视图,编辑rango/views.py文件,在文件尾部加入如下内容:rango/views.py:def about(r...
    99+
    2023-01-31
    实战 Django Rango
  • 实战Django:官方实例Part3
    前面两个部分我们介绍了投票应用的框架和后台管理部分。接下来舍得要介绍这个应用面向用户的界面。 这里我们要引入一个新的概念,“视图”。在Django中,视图是一根连接模型和模板的纽带,它决定哪些数据要呈现给用户。 来看一下Django的这几个...
    99+
    2023-01-31
    实战 实例 官方
  • Ingress实战
    IngressIngress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部...
    99+
    2023-01-31
    实战 Ingress
  • ZooKeeper实战
    作者:禅与计算机程序设计艺术 1.简介 ZooKeeper是一个分布式协调服务,它为大型分布式系统提供高可用性、高性能的数据发布/订阅服务。其设计目标是将那些复杂且容易出错的过程从应用中分离出来,构...
    99+
    2023-10-23
    大数据 人工智能 语言模型 Java Python 架构设计
  • python实战
    这个实战内容包含,selenium、pyquery、re、pymongopymongo安装去这里:https://blog.51cto.com/13155409/2125020实战抓取淘宝美食信息并且存入MongoDB数据库中 实现源码如下...
    99+
    2023-01-31
    实战 python
  • PHP实战
    PHP: 【PHP】 了解项目结构 Controller是控制层 View是视图层 从pulic’下面复制模板- 在view层创建admin文件夹,粘贴进去 在controller层...
    99+
    2023-08-31
    php 数学建模 开发语言
  • 《Python高效开发实战》实战演练——
    在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能。1)首先在djangosite/app/views.py中建立一个路由响应函数:from django....
    99+
    2023-01-31
    实战 高效 Python
  • PythonPygame实战之飞机大战的实现
    目录导语一、环境安装1)各种素材(图片、字体等)2)运行环境二、代码展示1)文章思路2)附代码讲解3)主程序三、效果展示总结导语 三月疫情原因,很多地方都封闭式管理了! 在回家无聊的...
    99+
    2024-04-02
  • Python Pygame实战之红心大战游戏的实现
    目录导语一、 红心大战用户手册二、红心大战游戏规则三、准备中四、代码演示五、效果展示导语 还记得那些年,我们玩过的Windows小游戏吗? 说起Windows自带的游戏,相信许多8...
    99+
    2024-04-02
  • Oracle dataguard failover 实战
    Oracle dataguard  failover 实战 操作步骤 备库: SQL> ALTER DATABASE RECOVER MANAGED STANDBY D...
    99+
    2024-04-02
  • linuxtop命令实战
    文章目录 一. top命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示进程信息3.2 显示完整的进程命令3.3 以批处理的形式展示3.4 设置信息更新频次3.5 显示指...
    99+
    2023-02-03
    linux top命令 linux top
  • python实战--Python Web
       最近在研究WebShell,于是打算写一个Python版的WebShell,使用的是cgi, Apache配置文件http.conf需做如下: 我的cgi脚本放到F:\py_cgi目录下,其中cgi-script指定脚本后缀名,例如...
    99+
    2023-01-31
    实战 python Web
  • AIDL for HALs实战
    Stable AIDL HAL 实战 背景: 官方:https://source.android.com/devices/architecture/aidl/aidl-hals. Google 在Android 11引入了AIDL f...
    99+
    2023-08-21
    android AIDL HAL
  • WEB渗透实战
    文章目录 文件上传漏洞WebShell文件上传漏洞原理 跨站脚本攻击跨站脚本的含义XSS的攻击途径跨站脚本的危害 SQL注入漏洞注入原理寻找注入点SQLMAP具体实践 SQL盲注...
    99+
    2023-09-12
    前端 web安全 安全
  • Android:AIDL实战详解
    AIDL:Android Interface Definition Language AIDL是为了实现进程间通信而设计的Android接口语言 Android进程间通信有多种方式,Binder机制是其中最常见的一种 AIDL的本质就是基于...
    99+
    2023-10-25
    android
  • python-爬虫实战
    想看看最近的电影院播放的今日影视,就以这个网址https://movie.douban.com/people/1166776/为例,先使用urllib.request模块抓取整个网页,再使用re模块获取影视信息 编写simpleCrawle...
    99+
    2023-01-30
    爬虫 实战 python
  • Django Python实战(一)
    这段日子决定学习python,开发一个运维系统,所有记录自己写下的点点滴滴 直接开始,不说废话了 好的开发首先需要一个好的开发平台,首先需要安装eclipse+python插件   1 python基础 主要说到python的基本几个方面:...
    99+
    2023-01-31
    实战 Django Python
  • Mysql实战45讲
    第一讲 基础架构 如上图所示MySQL整体来看,其实就有两块:一块是Server层,它主要做的是MySQL功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。 第二讲 日志系统 与查询流程不一样的是,更新流程还涉及两个重要的日志模块...
    99+
    2023-08-18
    mysql 数据库 java
  • Composer 从入门到实战:PHP 包管理实战指南
    ...
    99+
    2024-04-02
  • opencv 案例实战01-停车场车牌识别实战
    需求分析: 车牌识别技术主要应用领域有停车场收费管理,交通流量控制指标测量,车辆定位,汽车防盗,高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。 车牌自...
    99+
    2023-08-30
    opencv 人工智能 计算机视觉
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作