基于Django的web开发(前端部分-HTML)

        最近在学武沛齐老师的Django开发项目,学习之余整理了笔记,有兴趣的同学可以跟着此笔记来同步辅助学习。

另附上课程链接:00 课程介绍_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1rT4y1v7uQ?p=1&vd_source=95365bd1c5a79f54e63e9e08f3d6ce1b

一.HTML

目的:开发一个平台(网站)
    -前端开发︰HTML、css、Javascript
    -web框架:接收请求并处理
    -MysQL数据库:存储数据地方

快速上手:
基于Flask web框架让你快速搭建一个网站出来。

深入学习:
基于Django框架(主要)

1.快速开发网站

pip install flask
# 基于flask框架编写网站
from flask import Flask

app = Flask(__name__)

# 创建了网址/show/info和函数index的对应关系
# 以后用户在浏览器上访问/show/info,网站自动执行index
@app.route('/show/info')
def index():
    return'中国移动'

if __name__=='__main__':
    app.run()

运行结果: 

 但是这个网页多于单一化,我们可以继续完善它

 浏览器可以识别很多标签+数据,例如

<h1>中国</h1>浏览器看见加大加粗

<span style='color:red; ' >联通</span> ->浏览器看见字体变红色

如果我们能把浏览器能识别的所有的标签都学会,我们在网站就可以控制页面到底长什么样子。

 Flask框架为了让咱们写标签方便,支持将字符串写入到文件里

(1).增加了render_template,用来访问文件

# 增加了render_template,用来访问文件
from flask import Flask,render_template

app = Flask(__name__)

# Flask内部会自动打开这个文件,并读取内容,将内容给用户返回。
# 默认:去当前项目目录的templates文件夹中找。
@app.route('/show/info')
def index():
    return render_template('index.html')

if __name__=='__main__':
    app.run()

(2).创建templates目录,新建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>中国电信</h1>
    <h2>中国移动</h2>
    <h3>中国联通</h3>

</body>
</html>

运行结果:

2.浏览器能识别的标签

2.1编码(head中)

<meta charset="UTF-8">

2.2title(head中)

<title>移动运营商</title>

 

2.3标题<h></h>

<h1>1级标题</h1>
<h2>2级标题</h2>
<h3>3级标题</h3>
<h4>4级标题</h4>
<h5>5级标题</h5>
<h6>6级标题</h6>

2.4div和span

1.div:占一整行。【块级标签】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>移动运营商</title>
</head>
<body>
<div>有什么好玩的网游</div>
<div>穿越火线永远滴神</div>
</body>
</html>

2.span:自己多大占多少行。【行内标签,内联标签】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>移动运营商</title>
</head>
<body>
<span>111</span>
<span>222</span>
</body>
</html>

 

注意:这两个标签比较素+CSS样式,可以实现丰富的功能

2.5超链接 <a></a>

1.跳转到其他网站

<a href="https://new.qq.com/rain/a/20240403A00FXA00">NBA新闻</a>

2.跳转到自己的网站

<a href="/get/news">CBA新闻</a>

3.target="_blank新建一个页面跳转

# 当前页面跳转
<a href="/get/news">CBA新闻</a>

# 跳转到新建页面
<a href="/get/news" target="_blank">CBA新闻</a>

 此时需要修改web.py内容,然后在同目录下新建一个news.html

# 基于flask框架编写网站
from flask import Flask,render_template

app = Flask(__name__)

# 创建了网址/show/info和函数index的对应关系
# 以后用户在浏览器上访问/show/info,网站自动执行index
@app.route('/show/info')
def index():
    return render_template('index.html')

@app.route('/get/news')
def news():
    return render_template('news.html')

if __name__=='__main__':
    app.run()

 2.6图片<img />

<img src="图片地址" />
<h1>直接显示别人的图片(防盗链)</h1>
<img src="https://ts1.cn.mm.bing.net/th/id/R-C.7ecdb52cb56c0e121025e1b752296fb3?rik=tTsFgweG5QNWIQ&riu=http%3a%2f%2fpic.bizhi360.com%2fbbpic%2f27%2f9727_7.jpg&ehk=fzaYq%2brx5WqWQ2zu7P3Mqgnmwiq4Nx%2fbDftpz3vaf7w%3d&risl=&pid=ImgRaw&r=0"/>
显示自己的图片需要在同目录下新建static,然后在static中放入图片即可
<h1>显示自己的图片小米su7</h1>
<img src="/static/su7.jpg" />

<h1>关于设置图片的宽度和高度</h1>
<img src="/static/su7.jpg" style="height:500px;width:500px" /> # 设置高度和宽度为500像素
<img src="/static/su7.jpg" style="width:30%" /> # 设置图片大小为原来的30%

小结:

块级标签:

                <h1></h1>

                <div></div>

行内标签:
                <span></span>

                <a></a>

                <img />

嵌套(超链接和图片进行嵌套)
标签嵌套的意义

<a>中嵌套<img />,可以方便用户点击图片即可跳转购买链接

<h1>商品列表</h1>
<a href="https://detail.tmall.com/item.htm?id=652790330927&spm=a21bo.jianhua/a.201876.76.5af92a89V47Tnw&scm=1007.40986.369799.0&pvid=693d5507-fd21-4ee3-84c9-efe74dfa52e7">
    <img src="/static/音响.jpg" />
</a>

2.7列表 

无序列表格式
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>
有序列表格式
<ol>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ol>

2.8表格

表格格式
<table>
    <thead> #表头
    <tr>
        <th></th>
        <th></th>
        <th></th>
    </tr>
    </thead>
    <tbody> #表内容
    <tr> #行内容
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr> #行内容
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr> #行内容
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr> #行内容
        <td></td>
        <td></td>
        <td></td>
    </tr>
    </tbody>
</table>

案列:用户列表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user</title>
</head>
<body>
    <h1>用户列表</h1>
    <table border="1">
        <thead>
            <tr>
                <th>ID</th>
                <th>头像</th>
                <th>name</th>
                <th>email</th>
                <th>更多信息</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>
                    <img src="/static/音响.jpg" style="width:20%" />
                </td>
                <td>ty</td>
                <td>666@qq.com</td>
                <td>
                    <a href="https://blog.csdn.net/weixin_61218382?spm=1000.2115.3001.5343" target="_blank">
                        点击查看详情
                    </a>
                </td>
                <td>
                    编辑
                    删除
                </td>
            </tr>
            <tr>
                <td>1</td>
                <td>
                    <img src="/static/音响.jpg" style="width:20%" />
                </td>
                <td>ty</td>
                <td>666@qq.com</td>
                <td>
                    <a href="https://blog.csdn.net/weixin_61218382?spm=1000.2115.3001.5343" target="_blank">
                        点击查看详情
                    </a>
                </td>
                <td>
                    编辑
                    删除
                </td>
            </tr>
            <tr>
                <td>1</td>
                <td>
                    <img src="/static/音响.jpg" style="width:20%" />
                </td>
                <td>ty</td>
                <td>666@qq.com</td>
                <td>
                    <a href="https://blog.csdn.net/weixin_61218382?spm=1000.2115.3001.5343" target="_blank">
                        点击查看详情
                    </a>
                </td>
                <td>
                    编辑
                    删除
                </td>
            </tr>
            <tr>
                <td>1</td>
                <td>
                    <img src="/static/音响.jpg" style="width:20%" />
                </td>
                <td>ty</td>
                <td>666@qq.com</td>
                <td>
                    <a href="https://blog.csdn.net/weixin_61218382?spm=1000.2115.3001.5343" target="_blank">
                        点击查看详情
                    </a>
                </td>
                <td>
                    编辑
                    删除
                </td>
            </tr>
            <tr>
                <td>1</td>
                <td>
                    <img src="/static/音响.jpg" style="width:20%" />
                </td>
                <td>ty</td>
                <td>666@qq.com</td>
                <td>
                    <a href="https://blog.csdn.net/weixin_61218382?spm=1000.2115.3001.5343" target="_blank">
                        点击查看详情
                    </a>
                </td>
                <td>
                    编辑
                    删除
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

 2.9input系列

    <h1>输出框</h1>
        <input type="text">
        <input type="password">
        <input type="file">

    <h1>单选框</h1>
    <input type="radio" name="n1">man
    <input type="radio" name="n1">women

    <h1>多选框</h1>
    <input type="checkbox">1
    <input type="checkbox">2
    <input type="checkbox">3
    <input type="checkbox">4

    <h1>按钮</h1>
    <input type="button" value="提交"> # 普通按钮
    <input type="submit" value="提交"> # 提交表单

2.10 下拉框

    <h1>下拉框</h1>
    <select>
        <option>北京</option>
        <option>上海</option>
        <option>广州</option>
        <option>深圳</option>
    </select>

    <h1>多选下拉框</h1>
    <select multiple>
        <option>北京</option>
        <option>上海</option>
        <option>广州</option>
        <option>深圳</option>
    </select>

2.11多行文本

    <h1>多行文本</h1>
    <textarea></textarea>

案例:用户注册1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
    <h1>用户注册</h1>
    <div>
        账号:<input type="text">
    </div>
    <div>
        密码:<input type="password">
    </div>
    <div>
        性别:
             <input type="radio" name="n1">男
             <input type="radio" name="n1">女
    </div>
    <div>
        爱好:
             <input type="checkbox">篮球
             <input type="checkbox">游泳
             <input type="checkbox">羽毛球
             <input type="checkbox">乒乓球
    </div>
    <div>
        城市:
        <select>
            <option>上海</option>
            <option>北京</option>
            <option>广州</option>
            <option>深圳</option>
        </select>
    </div>
    <div>
        擅长领域:
        <select multiple>
            <option>打游戏</option>
            <option>睡觉</option>
            <option>吃饭</option>
            <option>泡妞</option>
        </select>
    </div>
    <div>
        备注:
        <textarea></textarea>
    </div>
    <div>
        <input type="button" value="button按钮提交">
        <input type="submit" value="submit按钮提交">
    </div>
</body>
</html>

知识点回顾和补充

1.网站请求的流程

2.一大堆的标签

h/div/span/a/img/ul/li/table/input/textarea/select

 3.网络请求

在浏览器的URL中写入地址,点击回车,访问。
    浏览器会发送数据过去,本质上发送的是字符串:
    "GET/explore http1.1\rlnhost:. . .\r\nuser-agentlr\n..lr\n\r\n"
    浏览器会发送数据过去,本质上发送的是字符串:
    "PosT /explore http1.1\rlnhost:...\r\nuser-agentlr\n..lr\nlr\n数据库"

浏览器向后端发送请求时

GET请求【url方法,表单提交】
现象:GET请求、跳转、向后台传入数据数据会拼接在URL上。
https : / / www.sogou.com/web?query=安卓&age=19&name=xX
注意:GET请求数据会在URL中体现。

POST请求【表单提交】
现象:提交数据不在URL中而是在请求体中。
页面上的数据,想要提交到后台:
form标签包裹要提交的数据的标签。

        提交方式:method="get"
        提交的地址:action="/ xxx/ xxx/xx"

        在form标签里面必须有一个submit标签。

在form里面的一些标签: input/select/textarea
      一定要写name属性<input type="text " name="uu" />

案例:用户注册2

创建新代码

创建Flask代码

from flask import Flask,render_template,request

app=Flask(__name__)

@app.route('/register',methods=['GET'])
def register():
        return render_template('register.html')

@app.route('/post/reg',methods=['POST'])
def post_register():
        user = request.form.get("user")
        pwd = request.form.get("pwd")
        gender = request.form.get("gender")
        hobby_list = request.form.getlist("hobby")
        city = request.form.get("city")
        skill_list = request.form.getlist("skill")
        more = request.form.get("more")
        print(user, pwd, gender, hobby_list, city, skill_list, more)
        # 将用户信息写入文件中实现注册、写入到excel中实现注册、写入数据库中实现注册

        # 2.给用户再返回结果
        return "注册成功"



if __name__ == '__main__':
    app.run()

创建html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户注册</h1>
    <form method="post" action="/post/reg">
        <div>
            账号:<input type="text" name="user"/>
        </div>
        <div>
            密码:<input type="password" name="pwd"/>
        </div>
        <div>
            性别:
            <input type="radio" name="gender" value="1">男
            <input type="radio" name="gender" value="2">女
        </div>
        <div>
            爱好:
            <input type="checkbox" name="hobby" value="11">吃
            <input type="checkbox" name="hobby" value="12">喝
            <input type="checkbox" name="hobby" value="13">玩
            <input type="checkbox" name="hobby" value="14">乐
        </div>
        <div>
            城市:
            <select name="city">
                <option value="bj">北京</option>
                <option value="sh">上海</option>
                <option value="sz">深圳</option>
            </select>
        </div>
        <div>
            擅长领域:
            <select name="skill" multiple>
                <option value="100">游戏</option>
                <option value="101">体育</option>
                <option value="102">泡妞</option>
            </select>
        </div>
        <div>
            备注:<textarea name="more"></textarea>
        </div>
        <input type="submit" value="submit按钮">

    </form>
</body>
</html>

 


 

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Django 通常使用模板语言来与前端交互。模板语言是一种特殊的语法,用来结合 Django 的后端数据和 HTML 代码。Django 的模板系统允许你使用变量、标签和过滤器在模板中渲染数据。 例如,你可以在模板中使用如下语法来显示一个变量的值: ``` {{ variable }} ``` 你也可以使用标签来执行一些特殊的操作,比如循环或条件判断: ``` {% for item in items %} {{ item }} {% endfor %} ``` 最后,你可以使用过滤器来对变量做一些额外的处理,比如将变量转化为大写或者首字母大写: ``` {{ variable|upper }} {{ variable|capitalize }} ``` 在模板渲染完成后,Django 会将结果发送给浏览器,从而实现与前端的交互。 ### 回答2: Django是一个高效的Python Web框架,也是一个服务器端框架,它与前端交互主要通过以下几种方式: 1. 封装模板引擎:Django内置了强大的模板引擎,可以将前端HTML页面与后端逻辑代码进行分离,实现前后端的交互。通过在模板中使用Django提供的模板标签和变量,可以将后端数据传递到前端页面中,完成数据的渲染和展示。 2. 提供RESTful API:Django可以使用Django REST framework来构建RESTful API,通过API可以实现前后端之间的数据交互和通信。前端可以通过发送HTTP请求来调用后端的API,获取数据或进行其他操作,后端则根据请求的方式和参数返回相应的数据。 3. 使用 Ajax 技术:Ajax是一种前端的技术,可以通过在前端页面中使用JavaScript发送异步请求,与后端进行数据交互。在Django中,可以通过定义视图函数来处理Ajax请求,并返回相应的数据,前端可以通过JavaScript的回调函数来处理返回的数据,并进行页面更新或其他操作。 4. WebSocket通信:Django可以使用第三方库来实现WebSocket通信,实现实时的双向数据传输。WebSocket可以在前后端之间建立持久性连接,实现实时通信和数据更新。通过在Django中创建WebSocket视图和处理器,前端可以使用WebSocket API与后端进行通信,并实现实时数据更新和推送。 总的来说,Django前端交互的方式有很多种,可以根据具体的需求和场景选择适合的方式进行交互,从而实现前后端的数据传递和通信。 ### 回答3: Django是一个基于PythonWeb框架,它可以与前端进行交互以实现动态网页的开发。 首先,Django通过使用模板语言实现与前端的交互。模板语言允许将动态数据插入到HTML模板中,从而生成最终的网页。在Django中,我们可以使用模板引擎来处理模板,通过标签和过滤器来操作模板中的数据,将数据传递给前端页面。 其次,Django提供了强大的视图功能来处理前端请求。我们可以定义视图函数,它们负责接收前端的请求并返回相应的数据。视图函数可以处理GET和POST等不同类型的请求,根据请求的类型和参数进行相应的操作,并将结果返回给前端页面。使用Django的路由系统,我们可以将请求的URL地址与相应的视图函数进行绑定,从而实现请求的分发和处理。 另外,Django还提供了表单功能来处理前端的用户输入。我们可以定义表单类来描述前端页面上的输入字段,并通过视图函数对表单数据进行验证和处理。Django的表单功能提供了丰富的验证选项,可以轻松地检查用户输入的有效性,并将错误信息返回给前端页面。 最后,Django还可以与前端进行异步交互,实现前后端的数据传输和更新。通过使用Django的视图函数和前端的JavaScript代码,我们可以实现异步请求和响应处理,从而实现更加流畅和交互性的用户体验。 综上所述,Django通过模板语言、视图函数、表单功能和异步交互等方式与前端进行交互,实现了动态网页的开发。这些功能使得开发者能够灵活地处理并响应前端的请求,从而实现了良好的用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值