文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍(学习笔记)

2023-09-02 18:49

关注

目录

  Django是目前比较火爆的框架,之前有在知乎刷到,很多毕业生进入大厂实习后因为不会git和Django框架3天就被踢掉了,因为他们很难把自己的工作融入到整个组的工作中。因此,我尝试自学Django并整理出如下笔记。
  在这部分,我将从Django的安装讲起,从创建项目到制作一个简单的页面(跑通流程),再到加入网页,介绍Django的模板语法。最后利用所学完成一个小的网页展示。

1. 安装Django

  django跟flask不一样,它pip install 之后除了会再Libs/site-package里面添加django包之外,还会在Scripts中间剪一个django-admin.exe文件,这个文件是个工具,能够帮我们直接创建django项目。主要是因为django需要创建的文件文件夹比较,直接这个用这个比较方便,可以自动创建。

2. 创建项目(startproject)

2.1 创建项目

​ 打开中断并进入项目想创建的目录。注意,第二条指令是需要保证python已经加入到电脑的环境变量中之后的。

cd Djangodjango-admin startproject first_try

2.2 介绍项目文件

first_trymanage.py// 好东西,项目管理、启动、创建app、数据管理都在这里,不要动它    first_try    __init__.py        settings.py// 项目的配置文件,很多操作也在这里(链接数据库)        urls.py// url和python函数的对应关系都在这里,操作基本都在这里        asgi.py// 异步接受网络请求的        wsgi.py// 同步接受网络请求的

2.3 APP(startapp)

​ app不是应用,是功能的划分。

​ 创建是靠manage.py创建的,终端输入

python manage.py startapp application01

在这里插入图片描述

appliction01__init__.pyadmin.py// django默认的自带后台管理apps.py// app启动类migrations// 数据库变更记录__init__.pymodels.py// 数据库的操作在这里test.py// 单元测试views.py// first_try里面的url里的函数一般都要在这里找(常用)

3. 走通流程(urls, views, runserver)

3.1 第一个页面

​ 在first_try/settings.py中找到 INSTALLED_APPS,加入app的config。这里是加入配置文件。

在这里插入图片描述

​ 写一个index放到视图中,相当与在这里写了一个页面。

在这里插入图片描述

​ 修改Django自带urlpatterns,相当于在这里将页面加入到网页中。

在这里插入图片描述

​ 在终端执行启动程序,我们看看结果。

python manage.py runserver 9211

在这里插入图片描述

3.2 多个页面

​ 在正常情况下,一个大的项目包含的页面何止百个,这一个页面当然不能满足我们的需求。我们可以尝试写多个页面。

​ view.py

# *coding:utf-8*from django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.def index(request):    return HttpResponse(r"Hey man, U can do it!")def Olsen(request):    return HttpResponse(r"I love Olsen!!!")def user(request):    return HttpResponse(r"User")

​ urls.py

from django.urls import pathfrom application01 import viewsurlpatterns = [    path('index/', views.index),    path('index/Olsen', views.index),    path('user/', views.index)]

​ 查看效果,可以看到我们的三个网页都在这里了。

在这里插入图片描述

4. 网页

4.1 加入网页(templates, render)

​ 正常情况下我们访问的网页都是花里胡哨的,是由http文件展现,完全不是现在这样的简单的几行字,那应该怎么实现这个功能呢?

​ 首先我们先要创建一个templates的文件,文件下面放入我们需要用到的html文件。注意,这里的文件名一定是templates,这个是django默认的。

在这里插入图片描述

​ 然后把templates加入到路径中,因为默认情况下会放到app下的templates里面,我们这个templates是再根目录里面的:

在这里插入图片描述

​ 我们随便写个html做实验:

在这里插入图片描述

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Titletitle>head><body>    <div>I love Olsen!!!div>body>html>

​ 在views.py中加入这个网页。在这里我们使用render函数,第一个参数为request,第二个参数是文件名,第三个参数可以不要,是把文件中用{{}}标起来的内容替换的功能。

def Clarknb(request):    return render(request, "Clarknb.html")

​ 再把这个添加到url.py里面:

urlpatterns = [    path('index/', views.index),    path('index/Olsen', views.index),    path('user/', views.index),    path('Clarknb/', views.Clarknb),]

在这里插入图片描述

4.2加入图片、css、js等静态文件

​ 先创建静态目录(static),再将目录添加到路径中。注意:一定要叫static,配置里就是这么叫的。

在这里插入图片描述

​ 效果如下:

在这里插入图片描述

​ css文件操作同上。注意:可以用{% load static %}加载static文件,然后再引用。这种方法需要在每个文件的头部都手动load一次,比较麻烦,所以我们尝试另一种办法:在settings.py中的TEMPLATES/OPTIONS添加'builtins':['django.templatetags.static']。这种写法的好处是以后改代码好改,因为这种读法是在配置文件中找这个静态的路径,改的时候不需要像之前绝对路径那样一个一个改。

在这里插入图片描述

​ 没有报错,证明引入成功了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAF5EGMz-1656380054984)(image-20220627111530102.png)]

5. 模板语法

5.1 基础语法与循环

​ 为了方便平时的使用,Django是有自己的模板语言的,说实话有些地方跟vue挺像的。我们修改之前的例子尝试一些Django的模板语法。这里用到了之前提到的render的第三个参数。

​ 主要用到的知识点有:

​ Clarknb.html:

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Titletitle>    <script src="{% static 'js/jquery.js' %}" type="text/javascript">script>    <script src="{% static 'plugins/bootstrap.min.js' %}" type="text/javascript">script>head><body>    <div>I love Olsen!!!div>    <div>test1:<br>{{n1}}div>    <div>{{n2}}div>    <div><br>test2:<br>{{n2.0}}div>    <div>{{n2.2}}div>    <div>        <br>test3:<br>        {{n3.hyq}}<br>        {{n3.zlp}}    div>    <div><br>test4:div>    <div>        {% for item in n2 %}            <span>{{item}}<br>span>        {% endfor %}    div>    <div><br>test5:div>    <div>        {% for k,v in n3.items %}            <li>{{k}}={{v}}li>        {% endfor %}    div>    <div><br>test6:div>    {% for item in n4 %}        {% for k,v in item.items %}            <li>{{k}}={{v}}li>        {% endfor %}{item.zlp}}=>{{item.hyq}}-->    {% endfor %}    <img src="{% static 'img/Olsen01.jpg' %}" alt="" style="width:100%">body>html>

​ views.py:

# *coding:utf-8*from django.shortcuts import renderfrom django.http import HttpResponse# Create your views here.def Clarknb(request):    name1 = "Clark"    name2 = ["Olsen", "ClarkHu", "LLGreat"]    name3 = {"hyq": 1, "zlp": 2}    name4 = [{"hyq": 1, "zlp": 2},             {"hyq": 3, "zlp": 6},             {"hyq": 4, "zlp": 9}]    return render(request, "Clarknb.html", {"n1": name1, "n2": name2, "n3": name3, "n4": name4})

​ 显示结果如下:

在这里插入图片描述

5.2 判断语句

​ Django也提供了判断语法:

​ views.py不变

​ Clarknb.html:

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Titletitle>    <script src="{% static 'js/jquery.js' %}" type="text/javascript">script>    <script src="{% static 'plugins/bootstrap.min.js' %}" type="text/javascript">script>head><body>    {% if n1 == "Clark" %}        <h1>ClarkHu NB!!h1>    {% elif n1 == "Olsen" %}        <h1>I love Olsenh1>    {% else %}        <h1>Brand new ending!!h1>    {% endif %}body>html>

在这里插入图片描述

5.3注意点

在这里插入图片描述

6. 案例

​ 根据所学,我们已经可以做到从某个网页爬取信息并将信息显示到我们自己网页上了。这里以联通的新闻为例(中国联通 (chinaunicom.com.cn))。实例中的新闻内容被迫打码,不然会被判定图片违规……

​ 我们首先获取发出请求的URL:
在这里插入图片描述

​ 返还的结果可以在response中查看:
在这里插入图片描述

​ 接下来我们用爬虫模拟这个步骤:

​ views.py(记得改User-Agent

def getnews(request):    import requests    head = {        "User-Agent": bulabula    }    res = requests.get("http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2022/06/news", headers=head)    data_list = res.json()    return render(request, "news.html", {"n1": data_list})

​ news.html

DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>newstitle>head><body>    <h1>        联通新闻中心    h1>    {% for item in n1 %}        <ul>            {% for k, v in item.items %}                <li>{{v}}li>            {% endfor %}        ul>    {% endfor %}body>html>

​ urls.py

"""first_try URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:    https://docs.djangoproject.com/en/3.2/topics/http/urls/Examples:Function views    1. Add an import:  from my_app import views    2. Add a URL to urlpatterns:  path('', views.home, name='home')Class-based views    1. Add an import:  from other_app.views import Home    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')Including another URLconf    1. Import the include() function: from django.urls import include, path    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import pathfrom django.conf.urls import urlfrom django.contrib import adminfrom django.urls import includefrom application01 import viewsfrom django.shortcuts import renderurlpatterns = [    path('index/', views.index),    path('index/Olsen', views.index),    path('user/', views.index),    path('Clarknb/', views.Clarknb),    path('news/', views.getnews),]

​ 结果很糙,但是跑通了,后续只要选取自己喜欢的信息展示就可以了。

在这里插入图片描述

来源地址:https://blog.csdn.net/Hjh1906008151/article/details/125477399

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯