服务端编程(九)- Django - 创建网站的基本骨架 创建你的主页

news/2024/5/20 11:09:55/文章来源:https://blog.csdn.net/weixin_43178828/article/details/104675280

文章目录

    • 前言 ´・ᴗ・`
    • url参数
    • 制定url规则
    • 制定url规则
    • 什么时候需要获取url?
    • 为什么我们操作catalog的url 而不是根目录的url?
    • 服务器如何响应——view.py
    • 模板的制作
    • render函数的运用
    • 彩蛋
    • 总结 ´◡`

前言 ´・ᴗ・`

  • 本节带你真正做出自己的主页 而不是停留在后台管理
  • 本篇内容将会帮助你学习…
    • 1 定义设置url跳转资源
    • 2 构建整个网站的基本骨架
    • 3 了解view.py url.py的使用
    • 4 制作主页

url参数

百度关键词的时候 我们看到我们的搜索词跑到了地址栏
在这里插入图片描述
前面文章说过

  • 这是动态网站 可以以一个模板适应无数的请求(搜索词变了 模板不变 只是搜索结果变了)
  • 这是get方法
  • 这是url属性(url的参数部分)

有没有感到好奇 为啥网站能够做到这些?我们该怎么做?

制定url规则

首先 你得在url.py 制定你的url规则
百度制定的规则是:\wd = <string>
string部分就是任何搜索词

意思 服务器将响应这类www.baidu.com\wd=形式的url 当然 是get方式
当然怎么响应 在django 就是view.py 干的事了
baidu相应这类请求的结果 就是你看到的一个个网站导航
在这里插入图片描述
于是 我制定 我的图书馆demo就是下面这些规则:

  • catalog/ — 主页
  • catalog/books/ — 书单页
  • catalog/authors/ — 作者页
  • catalog/book/ — 主键字段 ID的具体书(默认) —详细视图。
    如 /catalog/book/3,第三本书。
  • catalog/author/ — 主键字段 ID的具体作者(默认) —详细视图。
    如 /catalog/author/11,第11个作者。

真正访问 你就可以这么写:http://<你的域名>/catalog/
比如我的就是:http://47.112.174.246:3389/catalog/
这个是可用的 你可以试试 我弄了个服务器开着来调试玩着ヾ(≧▽≦*)o

接下来 你还需要制定规则:服务器该怎么响应
响应的函数在view.py 里面
然后响应的内容在template 意思 html的模板

模板是什么?百度你怎么搜索 模板都是一堆网址导航 的样式
我们也是这样

总结起来

  • 制定url规则 url.py
  • 制定服务器响应规则 view.py
    具体来说 服务器帮你链接模板 填上数据库的数据(render函数)
    然后返回给浏览器
  • 制作html 模板

制定url规则

也可以说是 创建 url 到访问资源的一一映射
在catalog/url.py 中 内容改成这样:

#-*- utf-8 -*-
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),]

对 你猜的没错 urlpatterns 这个列表放着所有url映射
包含几个参数:

  • ’ ’ 利用正则表达式匹配的模式 这里为就说明 没有任何参数 这就是主页index的响应方式
  • view.index 我说过 响应规则放view里面了 这是个view的函数 专门用来负责响应 针对主页的请求的
    你没猜错 待会儿我们还要编辑这个规则 这个函数
  • name=‘index’ 这条url规则的名字 —— 为啥要有名字?
    我们后面 要通过名字引用的!
    比如 我们这里是url ——> 资源 如果有一次 我们客户想要获取url怎么办?这时需要逆向(reverse)
    就需要这个url映射名字

什么时候需要获取url?

我们html模板会这么写

<a href="{% url 'index' %}">Home</a>.

这句意思 这个Home超链接到当前页 你看他直接用index这个url映射的名字
当然你可以牛掰的写上:

<a href="/catalog/">Home</a>

这就是 硬编码(hard code) 这样写死的后果就是 假设你管理一个上个不同网页的站点
你老板说 所有url映射 不写“catalog” 我要写‘cxk’
这个时候 你可能会通宵的修改上百个html模板
而且 所有超链接你都这样硬编码 或许你得通几个宵 然后哭晕在厕所(~ ̄▽ ̄)~

为什么我们操作catalog的url 而不是根目录的url?

你可能会有疑问 为啥不在根目录的url.py 写这句?如果用户并不访问catalog这个应用 直接访问:
http://47.112.174.246:3389/
该怎么办?
事实上前面也说了 会将所有请求重定向到catalog去的
你可以点开 观察地址栏的变化

意味着 catalog就是网站的主体了 所有url都基于
http://47.112.174.246:3389/catalog/
原因很简单 我们这个网站很小 是个单应用的网站 因此一个应用承办所有网站的请求

服务器如何响应——view.py

这里难点 关键是调用ORM 你要连接html模板 你要链接数据库(通过ORM数据模型)
在catalog\view.py 注意是catalog下面 这个应用的view

from .models import Book, Author, BookInstance, Genredef index(request):"""View function for home page of site."""# Generate counts of some of the main objectsnum_books=Book.objects.all().count()num_instances=BookInstance.objects.all().count()# Available books (status = 'a')num_instances_available=BookInstance.objects.filter(status__exact='a').count()num_authors=Author.objects.count()  # The 'all()' is implied by default.# Render the HTML template index.html with the data in the context variablereturn render(request,'index.html',context={'num_books':num_books,'num_instances':num_instances,'num_instances_available':num_instances_available,'num_authors':num_authors},)

复制粘贴过去

其实就干了两件事

  • 一个是设计了个 可以统计数量的程序段 比如书的数量 作者数量等
  • 二个是render 连接了名为“index.html”的模板 并且传参 book author等数据库的数据过去
    效果就类似:
    在这里插入图片描述

模板的制作

我们的render会自动寻找 当前目录下 template文件夹 去找html模板
因此 在catalog/template/新建 index.html:
我们这么写:

{% extends "base_generic.html" %}{% block content %}
<h1>Local Library Home</h1><p>Welcome to <em>LocalLibrary</em>, a very basic Django website developed as a tutorial example on the Mozilla Developer Network.</p><h2>Dynamic content</h2><p>The library has the following record counts:</p><ul><li><strong>Books:</strong> {{ num_books }}</li><li><strong>Copies:</strong> {{ num_instances }}</li><li><strong>Copies available:</strong> {{ num_instances_available }}</li><li><strong>Authors:</strong> {{ num_authors }}</li></ul>{% endblock %}

注意到 extends 没有?
这个是 基于什么拓展的意思 然后你发现 base_generic.html 我们都没做

我们的思路就是 所有网页模板 是基于base_generic 模板的 因为很多东西还是重复了 比如<html><body>等标签
于是 我们再在创建 html模板的模板:)
/locallibrary/catalog/templates/base_generic.html

<!DOCTYPE html>
<html lang="en">
<head>{% block title %}<title>Local Library</title>{% endblock %}<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script><!-- Add additional CSS in static file -->{% load static %}<link rel="stylesheet" href="{% static 'css/styles.css' %}">
</head><body><div class="container-fluid"><div class="row"><div class="col-sm-2">{% block sidebar %}<ul class="sidebar-nav"><li><a href="{% url 'index' %}">Home</a></li><li><a href="">All books</a></li><li><a href="">All authors</a></li></ul>{% endblock %}</div><div class="col-sm-10 ">{% block content %}{% endblock %}</div></div></div>
</body>
</html>

发现没有?block content 也就是内容模块 我们是空的 why?
你再看看我们主页的内容:
在这里插入图片描述
没错!所有catalog的html模板 都是基于对content模块的拓展
也就是 base_generic.html 就是网站的基本骨架——所有网页都是大致这个样式
其他html模板不过是对内容进行修改而已

可谓是html模板的模板

一般 我们设计就是从 网页骨架backbone 开始设计的

当然 我们也可以修改其他模块 只要两句

  • extends “base_generic.html”
  • {{% block <你想修改的block名称>%}}

最后 还需要添加一下css 显得稍微好看点
/locallibrary/catalog/static/css/styles.css

.sidebar-nav {margin-top: 20px;padding: 0;list-style: none;
}

render函数的运用

观察下面两幅图
index.html:
在这里插入图片描述
view.py:
在这里插入图片描述
发现render函数的context字典 那一个个键值对 其实都真的映射到html模板中去了
就像之前说的 服务器帮我们往html上填值了

彩蛋

观察一下:base_generic
在这里插入图片描述
这个index是不是有点眼熟?
这不就是url映射的那个名字嘛?!?

对了 映射名字的确是有暖用的:)

总结 ´◡`

runserver 来跑一下如何?
不出意外你会看到:‘’
在这里插入图片描述
当然 显示的文字你都可以更改 问题不大

我们下一步操作就是针对网站的其他部分 包括 多用户的管理 作者页 书的介绍等等

下一站:服务端编程(十)- Django -创建网站页面

  • 想学习数据库 打好后端基础嘛? 不妨从MySQL入手
    MySQL专栏

  • python这么火 想要深入学习python 玩一下简单的应用嘛?可以看我专栏 还在持续更新中哦:
    python应用

  • 小孩子才做选择 大人全都要!对后端感兴趣吗?收下它吧:)
    手把手带你学后端(服务端)

  • 谢谢大佬支持! 萌新有礼了:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_858672.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务端编程(十)- Django -创建网站页面

文章目录 前言 &#xff65;ᴗ&#xff65;ListviewListView 的细节修改编辑每本书的详情页detailView分页的编辑结语&#xff08;&#xffe3;︶&#xffe3;&#xff09;↗ 前言 &#xff65;ᴗ&#xff65; 上一节我们建立了主页 这里我们来创建一些别的网页 比如关于books…

网站优化问题:雅虎网站优化35条

1. Make fewer HTTP requests 尽可能少的http请求。。我们有141个请求&#xff08;其中15个JS请求&#xff0c;3个CSS请求&#xff0c;47个CSS background images请求&#xff09;&#xff0c;多的可怕。思考了下&#xff0c;为什么把这个三种请求过多列为对页面加载的重要不利…

用phpstudy正确配置阿里服务器 网站就是不能浏览原因

用phpstudy 配置PHPMYSQL阿里云服务器&#xff0c; 所有配置都正确&#xff0c;服务器本地上也正常浏览&#xff0c; 但是用绑定服务器的域名打开浏览就是不行。 原因是阿里云服务器上的安全设置问题 阿里云服务器默认不能访问的&#xff0c;需要在阿里云服务器上增加安全规…

2017 年最受欢迎的 10个编程挑战网站

热文导读 | 点击标题阅读 如何看待中通讯42岁员工坠楼事件&#xff1f;背后深层原因剖析&#xff01; 吊炸天&#xff01;74款APP完整源码&#xff01; 成为 Android 大牛的10大独门秘籍 原文&#xff1a;The 10 most popular coding challenge websites for 2017 https://med…

IIS6、IIS7.5设置网站默认首页方法(Directory Listing Denied)

这篇文章主要介绍了IIS6、IIS7.5设置网站默认首页方法,如果不设置访问目录就会提示Directory Listing Denied&#xff0c;就是不允许列出文档&#xff0c;为了安全网站都会设置不设置默认,需要的朋友可以参考下 今天有个客户问我他的网址访问目录就打开网站出现Directory List…

如何使用站群程序来批量建网站?

本文转自&#xff1a;http://www.00-9.net/html/1.html 1、准备工作。 (1)准备好将要搭建的网站域名&#xff0c;并解析。 (2)准备好你的目标站。标题/关键词/描述/网站名&#xff0c;替换标签。 (3)服务器系统环境WIN2008 2、用到的工具&#xff1a; (1)009站群程序授权版&am…

网站发送邮件连接数据口创建接口等

1. 导入API.php文件&#xff08;可以参考demo项目中的api.php文件&#xff09; <?php defined(BASEPATH) OR exit(No direct script access allowed); header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Headers: Origin, X-Reques…

在进网站之前加入一个类似开机视频的东西,视频播放完后自动跳到网站首页

首先建一个文件&#xff0c;里面放要加载的视频 <style></style> <script src"https://cdn.jsdelivr.net/npm/vue2.5.16/dist/vue.js"></script> <link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-ch…

常用各类工具网站

常用的各类网站&#xff1a; 1.自己备用&#xff0c;分享链接&#xff0c;也可供各位网友选择&#xff0c;若有侵权&#xff0c;可联系删除 2.会不定时更新 3.加油&#xff01;奥里给&#xff01; PPT&#xff1a; 1、 PPT超级市场 https://ppt.sotary.com/web/wxapp/index…

最好的UI/UE设计资源网站推荐-免费的头像库

在进行UI/UE设计时&#xff0c;一旦涉及到社交相关的功能&#xff0c;会经常需要使用到头像素材。而高质量、无版权要求的相关素材又非常少&#xff0c;这里为大家推荐一个素材库可以满足上述要求。 网址 FIGMA 和 SKETCH 的免费头像库 https://themeselection.com/products/e…

大型Web网站高并发架构方案

背景 搭建一套大型WEB网站从技术角度讲采用开源的成熟的方案落地实现起来很简单&#xff0c;但是怎么扛住高并发的流量呢&#xff1f;这是一个值得我们思考的问题&#xff0c;值得我们一探究竟如何优化既有架构从而实现高并发的访问&#xff0c;使系统优雅平稳的运行 现有架构…

用asyncio和aiohttp异步协程爬取披露易网站港资持股数据

这是本人毕设项目的一部分&#xff0c;也是比较核心的部分。 请自觉遵守相关法律法规&#xff0c;若侵权请联系本人立刻删除。 任务描述 爬取披露易网站上的港资持股A股详细股东数据。点击搜索栏下方的持股名单我们可以看到港资持股的股份名单。 任务分为三部分&#xff1a; …

基于GitHub搭建个人网站

基于GitHub搭建个人网站 基于GitHub搭建个人网站 我的个人站点 https://github.com/wforguo 当你撸完一份自己的个人网站&#xff0c;然后想让别人去访问它&#xff0c; 怎么办&#xff1f;去买个服务器&#xff0c;也太贵了吧&#xff01; 下面&#xff0c;利用GitHub来教你…

毕业设计——基于HTML5的洛阳旅游网站设计与实现

基于HTML5的旅游网站设计与实现 这是一个基于HTML5的旅游网站&#xff0c;论文、代码都很齐全。 获取源代码至GitHub&#xff1a;GitHub - wforguo/travel: 基于HTML5的旅游网 国内站点&#xff1a;travel: 毕业设计&#xff0c;课程设计&#xff0c;基于HTML5的洛阳旅游网开…

修改hosts不管用 为什么修改127 0 0 1指向的域名,访问域名却弹出别的网站

linux上的hosts&#xff1a; 一般在LINUX下修改完/etc/hosts文件都会立即生效的&#xff0c;即便偶尔不生效&#xff0c;只要重启一下network服务就可以了。 win上的hosts&#xff1a; 但是windows却是会遇到这样的问题&#xff0c;而且在不同版本的系统中还略有区别。 原理&am…

数据分析入门——推荐基础书以及实用网站

数据分析入门&#xff1a; 一开始肯定是数学基础巩固&#xff1a; 线性代数、统计论等。参考书成千上百&#xff0c;最重要还是理解透&#xff01; 二就是各种软件的熟悉利用&#xff1a;EXCEL SPSS SAS 等&#xff0c;这是我桌面常用到的软件&#xff1a; 三便是进阶版&#x…

GitHub网站的主题设置

文章目录 设置GitHub主题固定主题随时间自动改变主题 今天访问GitHub时&#xff0c;发现个人中心有一个新的功能点appearance。进一步发现此功能是设置GitHub的个人主题设置&#xff0c;主题有三个&#xff0c;分别为 Default light 、Default dark 、Dark dimmed 设置GitHub主…

大型网站技术架构-核心原理与案例分析

D:\和动力\大型网站技术架构-核心原理与案例分析.xmind 如果你觉得我的文章帮助到了你并节省了开发时间&#xff0c;请扫描下方二维码随意打赏❥(^_^) 您的支持是我最大的鼓励

搭建个人网站vm+center os+apache

如何搭建个人网站 准备的前提 vmcnetos 7apche 在vm上安装center os的教程就不介绍了这个有很多 1.如何配置一台刚装好了center os 7并且能够使他联网 ping 通百度 ip a查看当前ip地址&#xff08;如果显示当前界面&#xff0c;说明没有配置ip地址,网卡没有开启&#xff0…

用jQuery构建网站

主页面 常见的头尾自适应两列布局、第二列又分为上下两部分 实现的主要功能有 网站换肤功能 二级菜单功能图片轮播功能选项卡功能自定义的提示框功能品牌活动图上悬浮放大镜的功能 详情页面 和主页面布局差不多&#xff0c;也是头尾两列自适应布局 实现的功能&#xff1a…