Django基础学习(一)

前端开发

目的:开发一个平台(网站)
	- 前端开发: HTML, CSS,JavaScript
	- web框架:接收请求并进行处理
	- MySQL数据库:存储相应的数据

1.快速开发网站

pip install flask

创建项目并导入flask框架,然后建立网址和函数的对应关系。

from flask import Flask

app = Flask(__name__)


# 创建网址 /show/info 和函数index的对应关系
@app.route('/show/info')
def index():
    return "hello world"


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

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

from flask import Flask,render_template

app = Flask(__name__)


# 创建网址 /show/info 和函数index的对应关系
@app.route('/show/info')
def index():
    # Flask内部会自动打开整个文件,并读取内容,将内容进行返回
    # 我们需要把这些内容写在一个templates目录下面
    return render_template("index.html")

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

2.HTML(超文本传输语言)的结构及标签

2.1 HTML的结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">  # 指明文件的编码    
    <title>Title</title>	# 显示在浏览器顶部的网站的名称
</head>
<body>	# 在这个里面写主要内容 
<h1>hello world!</h1>	# 几级标题
</body>
</html>

2.2 标签

2.2.1 div和span
  • div : 块级标签
  • span: 自己多大占多大,行内标签
<div>内容</div>

<span>内容</span>
2.2.2 超链接
# 跳转到其他网站要写全
<a href="http://www.baidu.com">点击跳转</a>

# 跳转到自己网站
<a href="/login">点击跳转</a>

@app.route('/login')
def login():
    return render_template("login.html")
2.2.3 图片
# 直接显示别人的图片地址
<img src="图片地址">
<img src="https://upen.caup.net/ai_pics_mj/202303/1678119808158776.jpg">

# 显示自己的图片
	- 项目中创建static目录,图片放入其中
	<img src="/static/1.png">

小结

- 块级标签
	<h1></h1>
	<div></div>
- 行内标签
	<span></span>
	<a></a>
	<img>ddd

2.2.4 列表标签

<!-- 无序列表   -->
<ul>
    <li>列表1</li>
    <li>列表2</li>
</ul>
<!-- 有序列表   -->
<ol>
    <li>列表1</li>
    <li>列表2</li>
</ol>
2.2.4 表格
<table border="1px">
    <thead>
        <tr><td>ID</td><td>姓名</td><td>年龄</td></tr>
    </thead>
    <tbody>
        <tr>
            <td>01</td>
            <td>桥川</td>
            <td>20</td>
        </tr>
    </tbody>
</table>
2.2.5 input系列
<input type="text">

<input type="password">

<input type="file">

<input type="radio" name="man"><input type="radio" name="man"><input type="checkbox">篮球
<input type="checkbox">排球
<input type="checkbox">羽毛球
<input type="checkbox">台球

<input type="button" value="登录"> 普通的按钮
<input type="submit" value="提交"> 提交表单
2.2.6 下拉框
<select>
    <option>上海</option>
    <option>天津</option>
    <option>西安</option>
</select>
2.2.7 多行文本
<textarea></textarea>

补充:

  • 网络请求
      1. 在浏览器中输入URL,点击回车,然后进行访问。
      2. 浏览器向后端发送请求时
        • GET请求 向后台传入的数据会拼接到URL上。
        • Post请求 提交数据不在URL中而是在请求体中。

3.CSS样式

3.1 CSS应用方式

  1. 在标签上面
<input type="radio" name="gender" value="" style="height: 30%">
  1. 在head标签中写style标签

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            <!-- 类选择器-->
            .h1{
                color: aqua;
            }
        </style>
    </head>
    <body>
    <div>
        <h1 class="h1">用户登录</h1>
        <a>账号:<input type="text" name="account"></a><br>
        <a>密码:<input type="password" name="password"></a><br>
        <input type="submit" name="登录">
        </div>
    </body>
    </html>
    
    1. 写到css文件里面

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
          <link rel="stylesheet" href="common.css">
      </head>
      <body>
      <div>
          <h1 class="h1">用户登录</h1>
          <a>账号:<input type="text" name="account"></a><br>
          <a>密码:<input type="password" name="password"></a><br>
          <input type="submit" name="登录">
          </div>
      </body>
      </html>
      

3.2 选择器

  - ID选择器(只能应用于一个标签)

    ```html
    #h1{
    
    }
    
    <h1 id="h1">用户登录</h1>
    ```

  - 类选择器(可以应用于多个标签)

    ```html
    .h1{
    
    }
    
    <h1 class="h1">用户登录</h1>
    ```

  - 标签选择器

    ```html
    h1{
    
    }
    
    <h1>用户登录</h1>
    ```

  - 属性选择器

    ```
    input[type='text']{
    	border:1px solid red;
    }
    ```

  - 后代选择器

    ```css
    .c1 li{
        color:red;
    }
    ```

3.3 样式

3.3.1 高度和宽度
.h1{
	height:300px;
	width:500px;
}

注意事项:

  • 宽度:支持百分比。
  • 行内标签:默认无效。
  • 块级标签:默认有效。
3.3.2 块级和行内标签

通过css样式可以中合两者 display: inline-block

3.3.3 字体和颜色
.h1{
color: #00FF7F;
font-size:60px;
font-weight: 100;
font-family:Microsoft yahei;
}
3.3.4 浮动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
  <span>左边</span>
  <span style="float:right">右边</span>
</div>
</body>
</html>

注意 : 把float用于div块级标签,会出现脱离文档流。

3.3.5 边距

/* 内边距*/
padding-top: 20px;

/*外边距*/
margin-top: 20px;

4.BootStrap

别人帮我们写好的CSS样式,如果使用需下载。

  • 下载BootStrap

  • 把BootStrap进行导入

4.1 导航

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../static/plugins/bootstrap-3.4.1/css/bootstrap.css">
</head>
<body>
<div class="navbar navbar-default" role="navigation">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">中国联通</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
        <li><a href="#">广西</a></li>
        <li><a href="#">上海</a></li>
        <li><a href="#">四川</a></li>
      </ul>

      <form class="navbar-form navbar-left">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>

      <ul class="nav navbar-nav navbar-right">
        <li><a href="#">登录</a></li>
        <li><a href="#">注册</a></li>


        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">CPanMirai <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a></li>
          </ul>
        </li>
      </ul>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</div>

</body>
</html>

4.2 栅格系统

  • 把整体划分为12格

  • 分类

    • 响应式,根据屏幕宽度不同

      .col-lg-  1170px
      .col-md-  970px
      .col-sm-  750px
      
    • 非响应式

      <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
      <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
      
    • 列偏移

      <div class="row">
        <div class="col-sm-offset-2 col-sm-6" style="background-color: #2aabd2">34245</div>
      </div>
      
<div class="row">
  <div class="col-xs-12 col-sm-6 col-md-8" style="background-color: #2aabd2">.col-xs-12 .col-sm-6 .col-md-8</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
</div>
<div class="row">
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
  <!-- Optional: clear the XS cols if their content doesn't match in height -->
  <div class="clearfix visible-xs-block"></div>
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
</div>

4.3 BootStrap依赖

BootStrap依赖JavaScript的类库,jQuery。

  • 下载jQuery,在页面上应用于jQuery。

  • 在页面上应用BootStrap的JavaScript类库。

    <script src="../static/js/jquery-3.7.1.min.js"></script>
    <script src="../static/plugins/bootstrap-3.4.1/js/bootstrap.min.js"></script>
    

5.JavaScript(实现动态效果)

  • JavaScript,是一门编程语言。浏览器就是JavaScript的解释器。

  • DOM和BOM

    相当于编程语言内置模块。
    例如:python中re、random、time、json模块等。
    
  • jQuery

    相当于编程语言中第三方模块。
    例如:requests、openpyxl
    

    例如:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .menus{
                width: 200px;
                border:1px solid red;
            }
            .menus .header{
                background-color: gold;
                padding: 20px 10px;
            }
        </style>
        <script>
            function myFunc(){
                confirm("是否继续?")
            }
        </script>
    </head>
    <body>
        <div class="menus">
            <div class="header" onclick="myFunc()">大标题</div>
            <div class="item">内容</div>
        </div>
    </body>
    </html>
    

5.1 代码位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    位置1-->
    <script></script>
</head>
<body>
    <div class="menus">
        <div class="header" onclick="myFunc()">大标题</div>
        <div class="item">内容</div>
    </div>
<!--    位置2-->
    <script></script>
</body>
</html>

5.2 js代码的存在形式

  • 当前的HTML中。
  • 写在JavaScript文件进行导入即可。

5.3 变量

    <script type="text/javascript">
        var name="cp"
        console.log(name);
    </script>

5.4 字符串类型

// 声明
var name="cp";
var name=String("cp");

// 常见功能
var name="cp";
var v1=name.length;
var v2=name[0];

5.5 跑马灯

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<span id="txt">如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。</span>
<script type="text/javascript">
    function show() {
       // 1. 找到标签,获取内容
        var tag = document.getElementById("txt")
        var dataString = tag.innerText;

        // 2. 字符串拼接
        var firstChar = dataString[0];
        var otherString = dataString.substring(1, dataString.length)
        var newText = otherString + firstChar

        // 3.在html标签中更新内容
        tag.innerText = newText
        console.log(newText)
    }
    setInterval(show,1000)

</script>
</body>
</html>

5.6 数组

// 定义
var v1 = [1,2,3,4]
var v2 = Array([1,2,3,4]);

// 操作
var v1 = [1,2,3,4];

// 查
v1[0];

// 改
v1[0]=5;

// 增
v1.push(5);		// 尾部追加 [1,2,3,4,5]
v1.unshift(5);	// 前面追加 [5,1,2,3,4]
v1.splice(索引位置,0,元素);
v1.splice(1,0,5)	// 尾部追加 [1,5,2,3,4]

// 删
v1.pop()	// 尾部删除
v1.shift()	// 头部删除
v1.splice(索引位置,1)
v1.splice(2,1)	// 索引为2的元素删除 [1,2,4,5]

// 循环
var v1 = [1,2,3,4,5];
for(var idx in v1){
    // idx = 0/1/2/3/4	data = v1[idx]
}

for(var i=0;i<v1.length;i++){
    // idx = 0/1/2/3/4	data = v1[idx]
}

5.7 数组案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul id="city"></ul>

    <script type="text/javascript">
        var cityList = ["北京","上海","深圳"]
        for(var idx in cityList){
            var text = cityList[idx];
            // 创建li标签
            var tag = document.createElement('li');
            // 在li标签中写入内容
            tag.innerText=text;

            // 添加到city里面
            var parentTag=document.getElementById("city");
            parentTag.appendChild(tag)

        }
    </script>
</body>
</html>

5.8 对象(字典)

info = {
	"name":“cp”,
	"age":18
}

info = {
	name:"cp",
	age:18
}

// 查
info.age
info[age]

// 查、改
info.name = "xx"
info[name] = "xx"

// 删
delete info['age']

// 循环
for(var key in info){
    // key = name/age data = info[key]  
}

5.9 动态表格

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1px">
    <thead>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    </thead>
    <tbody id="tbody"></tbody>
</table>
<script type="text/javascript">
    var data = [{
        "ID": 10000,
        "name": "x0",
        "age": 18
    }, {
        "ID": 10001,
        "name": "x1",
        "age": 18
    }, {
        "ID": 10002,
        "name": "x2",
        "age": 18
    }]
    for (var i = 0; i < data.length; i++) {
        // 创建tr
        var tagTr = document.createElement("tr");
        for (var key in data[i]) {
            var content = data[i][key];
            var tag = document.createElement("td");
            tag.innerText = content;
            tagTr.appendChild(tag)
        }
        var tagTbody=document.getElementById('tbody')
        tagTbody.appendChild(tagTr)
    }
</script>
</body>
</html>

5.10 条件语句

if(){

}else{

}

5.11 函数

function func(){
	...
}

5.12 DOM

DOM , 就是一个模块 , 模块可以对HTML页面中的标签进行操作。

// 根据ID获取标签
var tagTbody = document.getElementById('tbody')

// 获取标签中的文本
tagTbody.innerText

// 创建标签
var tagTbody = document.createElement("div");

// 向标签中增加内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul id="city"></ul>
<script type="text/javascript">
    var tag = document.getElementById("city")
    var newTag = document.createElement("li");
    newTag.innerText = "陕西";
    tag.appendChild(newTag)
</script>
</body>
</html>

5.13 事件的绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<label>
    请输入内容:
    <input type="text" id="contentText">
    <input type="button" value="点击增加" οnclick="addText()">
</label>
<ul id ="city"></ul>
<script>
    function addText() {
        // 创建li标签
        var newTag=document.createElement("li")
        
        // 获取输入框中的值赋值给新标签
        newTag.innerText=document.getElementById("contentText").value
        
        // 给标签增加孩子标签
        document.getElementById("city").appendChild(newTag)
        
        // 输入框内容清空
        document.getElementById("contentText").value = ""
    }
</script>
</body>
</html>

6.jQuery

jQuery是一个JavaScript第三方模块(第三方类库)。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../static/js/jquery-3.7.1.min.js"></script>
</head>
<body>
<h1 id="txt">中国加油!</h1>
<script type="text/javascript">
    // 找到id=txt的标签并修改
    $("#txt").text("hello world!");
</script>
</body>
</html>

6.1 寻找标签(直接寻找)

  • ID选择器

    <h1 id = "txt">
        中国加油!
    </h1>
    
    $("#txt")
    
  • 样式选择器

    <h1 class="c1">中国加油!</h1>
    
    $(".c1")
    
  • 标签选择器

    <h1 class="c1">中国加油!</h1>
    
    $("h1")
    
  • 层级选择器

     <h1 class="c1">
     	<div class="c2">
            <span></span>
         </div>
     </h1>
     
     $(".c1 .c2 span")
    
  • 多选择器

     <h1 class="c1">
     	<div class="c2">
            <span></span>
         </div>
     </h1>
     
     $(".c1,.c2,span")
    
  • 属性选择器

    <input type="text" name="n1">
    <input type="text" name="n2">
    <input type="text" name="n3">
    
    $("input[name='n1']")
    

6.2 间接寻找

  • 找到兄弟

    <div>
        <div>篮球</div>
        <div id="c1">足球</div>
        <div>排球</div>
    </div>
    
    $("#c1").prev()		// 找到上一个兄弟
    $("#c1").next()		// 找到下一个兄弟
    $("#c1").siblings()	// 找到除c1的所有兄弟
    
  • 找父子

    <div>
        <div>
            <div>篮球</div>
            <div id="c1">足球</div>
            <div>排球</div>
        </div>
        <div>
            <div>台球</div>
            <div>xx</div>
            <div>xx1</div>
        </div>
    </div>
    
    
    $("#c1").parent()	// 找父亲
    $("#c1").children()	// 找所有的孩子
    

例子:下拉菜单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../static/js/jquery-3.7.1.min.js"></script>
    <style>
        .menus {
            width: 200px;
            height: 800px;
            border: 1px solid red;
        }

        .menus .header {
            background-color: gold;
            padding: 10px 5px;
        }

        .menus .content a {
            display: block;
            margin-bottom: 10px;
            border-bottom: 1px dotted #dddddd;
        }

        .hide {
            display: none;
        }
    </style>
</head>
<body>
<div class="menus">
    <div class="item">
        <div class="header" onclick="test(this)">上海</div>
        <div class="content hide">
            <a>篮球</a>
            <a>足球</a>
            <a>排球</a>
        </div>
    </div>

    <div class="item">
        <div class="header" onclick="test(this)">上海2</div>
        <div class="content hide">
            <a>篮球2</a>
            <a>足球2</a>
            <a>排球2</a>
        </div>
    </div>

    <div class="item">
        <div class="header" onclick="test(this)">上海3</div>
        <div class="content hide">
            <a>篮球3</a>
            <a>足球3</a>
            <a>排球3</a>
        </div>
    </div>
</div>

<script>
    function test(self) {
        $(self).next().removeClass("hide")
        $(self).parent().siblings().find(".content").addClass("hide")
    }
</script>
</body>
</html>


6.3操作样式

  • addClass
  • removeClass
  • hasClass

6.4 值的操作

<div id="d1">内容</div>

$("#d1").text()			// 获取文本内容
$("#d1").text("内容1")	// 设置文本内容

<input type="text" id="i2">
$("#i2").val()	// 获取用户输入的值
$("#i2").val("hello world!")	// 设置值

例子:动态增加数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../static/js/jquery-3.7.1.min.js"></script>
<body>
<input type="text" id="txtUser" placeholder="用户名">
<input type="text" id="txtEmail" placeholder="邮箱">
<input type="button" value="提交" onclick="getInfo()">
<ul id="location">
</ul>
<script>
    function getInfo() {
        // 1. 获取用户名和邮箱
        var userName = $("#txtUser").val()
        var email = $("#txtEmail").val()
        var dataString = userName+"\t"+email
        // 2. 创建li标签,加入用户名和密码
        var newLi = $("<li>").text(dataString)
        $("#location").append(newLi)
    }
</script>
</body>
</html>


6.5 事件

<ul>
    <li>篮球</li>
    <li>足球</li>
    <li>排球</li>
</ul>

<script>
	$("li").click(function(){
        // 点击li标签时,自动执行这个函数
        // $(this) 当前点击的是那个标签。
    });
</script>

在JQuery中可以删除某个标签。

<div id="c1">
    内容
</div>

$("#c1").remove()
<ul>
    <li>篮球</li>
    <li>足球</li>
    <li>排球</li>
</ul>

<script>
    $(function(){
        // 当页面的框架加载完成之后,自动就执行。
        $("li").click(function(){
        	$(this).remove();
    });
    });
</script>

例子:表格

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../static/js/jquery-3.7.1.min.js"></script>
<body>
<table border="1px">
    <thead>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <th>1001</th>
        <th>cp</th>
        <th><input type="button" value="删除" class="delete"></th>
    </tr>

    <tr>
        <th>1002</th>
        <th>cp2</th>
        <th><input type="button" value="删除" class="delete"></th>
    </tr>

    <tr>
        <th>1003</th>
        <th>cp3</th>
        <th><input type="button" value="删除" class="delete"></th>
    </tr>
    </tbody>
</table>

<script>
    $(function () {
       $(".delete").click(function () {
        $(this).parent().parent().remove()
    });
    });

</script>
</body>
</html>

模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../static/plugins/bootstrap-3.4.1/css/bootstrap.css">
</head>
<body>

<script src="../static/js/jquery-3.7.1.min.js"></script>
<script src="../static/plugins/bootstrap-3.4.1/js/bootstrap.min.js"></script>
</body>
</html>

例子:添加数据页面

人员信息录入功能,用户信息:用户名、年龄、部门、入职时间

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../static/plugins/bootstrap-3.4.1/css/bootstrap.css">
</head>
<body>
<div class="container">
    <form class="form-horizontal">
        <div class="row clearfix">
            <div class="col-xs-6">
                <!--姓名-->
                <div class="form-group">
                    <label class="col-sm-2 control-label">姓名</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="inputEmail3" placeholder="姓名">
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <!--年龄-->
                <div class="form-group">
                    <label class="col-sm-2 control-label">年龄</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="inputAge" placeholder="年龄">
                    </div>
                </div>
            </div>
        </div>


        <div class="row clearfix" >
            <div class="col-xs-6">
                <!--部门-->
                <div class="form-group">
                    <label class="col-sm-2 control-label">部门</label>
                    <div class="col-sm-10">
                        <!--                <input type="text" class="form-control" id="inputDepartments" placeholder="年龄">-->
                        <select class="form-control">
                            <option>IT部门</option>
                            <option>销售部门</option>
                            <option>运营部门</option>
                        </select>
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-2 control-label">入职日期</label>
                    <div class="col-sm-10">
                        <input type="date" class="form-control" id="inputTime" placeholder="入职日期">
                    </div>
                </div>
            </div>
        </div>


        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-primary">提交</button>
            </div>
        </div>
    </form>


    </form>
</div>
<script src="../static/js/jquery-3.7.1.min.js"></script>
<script src="../static/plugins/bootstrap-3.4.1/js/bootstrap.min.js"></script>
<script></script>
</body>
</html>

7.python操作MySql

用python代码连接MySQL并发送指令。

pip install pymysql

python代码

import pymysql

# 1. 连接mysql数据库
conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="123456",charset="utf8",db="unicom")
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令
cursor.execute("insert into admin(username,password,mobile) values('admin','123456','18729749445')")
conn.commit()

# 3. 关闭
conn.close()
cursor.close()

7. mysql中文乱码

SHOW FULL COLUMNS FROM admin;

在这里插入图片描述

CREATE DATABASE unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE TABLE admin(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(16) NOT NULL,
PASSWORD VARCHAR(64) NOT NULL,
mobile CHAR(11) NOT NULL
)DEFAULT CHARSET=utf8;


python代码

import pymysql

# 1. 连接mysql数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令(不要用字符串格式化去做sql的拼接,安全隐患SQL注入)
# sql="insert into admin(username,password,mobile) values(%s,%s,%s)"
# cursor.execute(sql,['admin1','123456','234234'])

sql = "insert into admin(username,password,mobile) values(%(n1)s,%(n2)s,%(n3)s)"
cursor.execute(sql, {"n1": "陈破案", "n2": "123456", "n3": "123456"})
conn.commit()

# 3. 关闭
conn.close()
cursor.close()

查询数据

import pymysql

# 1. 连接mysql数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令
cursor.execute("select * from admin")
data_list = cursor.fetchall()
for row_dict in data_list:
    print(row_dict)

# 3. 关闭
conn.close()
cursor.close()

删除

import pymysql

# 1. 连接mysql数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令
sql = "delete from admin where id=%s"
cursor.execute(sql,[2,])
conn.commit()

# 3. 关闭
conn.close()
cursor.close()

修改数据

import pymysql

# 1. 连接mysql数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令
sql = "update admin set mobile=%s where id=%s"
cursor.execute(sql,["1898943",1,])
conn.commit()

# 3. 关闭
conn.close()
cursor.close()

强调:

  • 在进行新增、删除、修改时,要记得commit,而在查询的时候,不需要commit,执行fetchall / fetchone

结合flask框架

from flask import Flask, render_template, request
import pymysql

app = Flask(__name__)


@app.route('/add/user', methods=['GET', 'POST'])
def add_user():
    if request.method == 'GET':
        return render_template("add_user.html")
    else:
        user = request.form.get('user')
        pwd = request.form.get('pwd')
        mobile = request.form.get('mobile')
        conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        sql = "insert into admin(username,password,mobile) values(%s,%s,%s)"
        cursor.execute(sql, [user, pwd, mobile])
        res = conn.commit()
        print(res)
        # 3. 关闭
        conn.close()
        cursor.close()
        return "success"


@app.route('/show/user')
def show_user():
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select * from admin"
    cursor.execute(sql)
    dataList = cursor.fetchall()
    # 3. 关闭
    conn.close()
    cursor.close()
    print(dataList)
    return render_template("show_user.html",dataList=dataList)


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

add_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>添加用户</h1>
    <form method="post" action="/add/user">
        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="pwd" placeholder="密码">
        <input type="text" name="mobile" placeholder="手机号">
        <input type="submit" value="提交">
    </form>
 </body>
</html>

show_user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1px">
    <thead>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>密码</th>
        <th>手机号</th>
    </tr>
    </thead>
    <tbody>
    {% for item in dataList %}
    <tr>
        <td>{{ item.id }}</td>
        <td>{{ item.username }}</td>
        <td>{{ item.password }}</td>
        <td>{{ item.mobile }}</td>
    </tr>
    {% endfor %}

    </tbody>
</table>
</body>
</html>

template模板的作用

  • 找到html页面,读取所有的内容。
  • 找到内容中”特殊的占位符“,将数据替换。
  • 将替换完成的字符串返回用户的浏览器。

8.安装Django

通过pip安装,win+R打开命令窗口,输入cmd , 在控制台输入以下命令:

pip install django

# 如果有多个python版本的话,需要指定,以3.12为例
pip3.12 install django

遇到问题如下:

在这里插入图片描述

解决:切换网络,可能网速问题,导致下载失败。

成功:

在这里插入图片描述

为了保险起见,可以再看看python的文件夹,是否在scripts里面出现django-admin.exe以及Lib中出现django。

D:\python\Python3.12.0
	- python.exe
    -Scripts
    	-pip.exe
        -django-admin.exe  # 工具,用于创建django项目中的文件和文件夹
    - Lib
    	-内置模块
        -site-packages
       		- openpyxl
            - python-docx
            - flask
            - django	# 框架的源码

9.创建项目(两种方式)

django中项目会有一些默认的文件和文件夹。

9.1 终端创建

  1. win+R,输入cmd,打开终端。

  2. cd 目录(切换到项目的目录)

    cd /d F:\python\python_Web
    
  3. 执行命令创建项目

    “D:\python\Python3.12.0\Scripts\django-admin.exe” startproject 项目名称
    
    # 如果D:\python\Python3.12.0\Scripts 已加入环境系统环境变量
    django-admin startproject 项目名称
    
  4. 查看是否创建成功

    在这里插入图片描述

9.2 pycharm里面创建

  1. 点击文件,创建项目

    在这里插入图片描述

  2. 选择Django项目,修改项目的位置、名称、python版本。

    在这里插入图片描述

两者对比:

  1. 命令行:创建的标准项目。

  2. pycharm:会在默认基础上面加入了点东西。

    • 创建了一个templates目录(删除) 。

    • settings.py里面找到Dir,把里面的内容删除。

      在这里插入图片描述

在这里插入图片描述

默认项目的文件介绍:

django_Basic
	- manage.py		# 项目的管理,启动项目,创建app,数据管理 不要动,但会经常用
	- django_Basic
		- __init__.py
		- asgi.py	# 异步接收网络请求 不要动
		- settings.py	# 项目的配置文件	常常修改
		- urls.py	# url和函数的对应关系   常常修改
		- wsgi.py	# 同步接收网络请求 不要动

10.创建APP

- 项目
	- app,用户管理	# 表结构、函数、html模板、css
    - app,订单管理	# 表结构、函数、html模板、css
    - app,后台管理	# 表结构、函数、html模板、css
    - app,API	# 表结构、函数、html模板、css
    ...
注意:我们目前开发,用不到多app,一般情况下,项目创建1个app即可。

在这里插入图片描述

- app01
	- __init__.py
	- admin.py	# 固定,不用动 django默认提供了admin后台管理,但是基本很少使用 
	- apps.py	# 固定,不用动		app启动类
	- migrations	# 固定,不用动	数据库字段变更记录(自动生成)
		- __init__.py
	- models.py	# 对数据库操作
	- tests.py	# 进行单元测试
	- views.py	# 视图函数(重要)
- manage.py
- django_Basic
	- __init__.py
	- asgi.py	
	- settings.py	
	- urls.py	
	- wsgi.py

11.快速上手

11.1 第一个页面

确保app已注册

在这里插入图片描述

在这里插入图片描述

编写URL和视图函数对应关系(urls.py)

在这里插入图片描述

编写试图函数(views.py)

在这里插入图片描述

启动Django项目

  • 命令行启动
python manage.py runserver
  • pycharm启动

    在这里插入图片描述

以后都是重复这些操作。

11.2 templates模板

在这里插入图片描述

11.3静态文件

在开发过程中一般将:图片、css、js当作静态文件处理。

{#这样写方便项目上线#}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
</head>
<body>
<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>

12.模板语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。

在这里插入图片描述

{#这样写方便项目上线#}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
</head>
<body>
<div>{{ n1 }}</div>
<div>{{ n2.0 }}</div>
<div>
    {% for item in n2 %}
        <span>{{ item }}</span><br>
    {% endfor %}
</div>

<div>
    <a>{{ n3.name }}</a>
    <a>{{ n3.salary }}</a>
    <a>{{ n3.role }}</a>
</div>

<div>
    {% for k,v in n3.items %}
        <li>{{ k }}={{ v }}</li>
    {% endfor %}
</div>

<div>
    {% for item in n4 %}
        <div>{{ item.name }}</div>
        <div>{{ item.salary }}</div>
        <div>{{ item.role }}</div>
    {% endfor %}
</div>
{% if n1 == "xx" %}
    <h1>true</h1>
{% else %}
    <h1>false</h1>
{% endif %}
<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>
def tpl(request):
    name = "xxx"
    roles = [1, 2, 3]
    user_info = {"name": "xxx", "salary": 100, "role": "debug"}
    data_list = [{"name": "xxx1", "salary": 100, "role": "debug"}, {"name": "xxx2", "salary": 100, "role": "debug"},
                 {"name": "xxx3", "salary": 100, "role": "debug"}]
    return render(request, 'tpl.html', {"n1": name, "n2": roles, "n3": user_info, "n4": data_list})

13.请求和响应

关于重定向:

在这里插入图片描述

# urls.py
path('something/', views.something)

# views.py
def something(request):
    # request是一个对象,封装了用户发送过来的所有请求相关数据

    # 1. 获取请求方式 GET/POST
    print(request.method)

    # 2. 在URL上传递值
    print(request.GET)

    # 3. 在请求体中提交数据
    print(request.post)

    # 4. [响应] HttpResponse("返回内容") 内容字符串内容返回给请求者。
    # return HttpResponse("返回内容")

    # 5. [响应] 读取HTML的内容 + 渲染(替换) -> 字符串,返回给用户浏览器。
    # return render(request,'news.html',{'title':"中国"})

    # 6. [响应] 让浏览器重定向
    return redirect('https://www.baidu.com')

登录案例:

def login(request):
    if request.method == "POST":
        username = request.POST['user']
        password = request.POST['pwd']
        if username=="xxxx" and password=="<PASSWORD>":
            return HttpResponse("登录成功!")
        else:
            return render(request, 'login.html',{'error_msg':"用户名或密码错误"})
    else:
        return render(request, 'login.html')

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="../static/plugins/bootstrap-3.4.1/css/bootstrap.css">
    <style>
        body {
            width: 100%;
            height: 100%;
        }

        .center {
            width: 400px;
            height: 300px;
            margin-left: auto;
            margin-right: auto;
            margin-top: 10%;
            border: 1px solid #dddddd;
            padding: 20px 40px;
            border-radius: 10px;
            box-shadow: 2px 2px 20px #aaa;
        }

    </style>
<body>
<div class="center">
    <h2 style="text-align: center ">用户登录</h2>
    <form method="post" action="/login/">
        {% csrf_token %}
        <div class="form-group">
            <label>账号</label>
            <input type="text" name="user" class="form-control" id="exampleInputEmail1" placeholder="账号">
        </div>
        <div class="form-group">
            <label>密码</label>
            <input type="password" name="pwd" class="form-control" id="exampleInputPassword1" placeholder="密码">
        </div>
        <input type="submit" value="登录" class="btn-info"
               style="margin-left: 40%;width: 100px;height: 40px;border-radius: 5px">
        <span>{{ error_msg }}</span>
    </form>

</div>
</body>
</html>

14.数据库操作

  • MySQL数据库 + pymysql
import pymysql

# 1. 连接mysql数据库
conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", charset="utf8", db="unicom")
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 2. 发送指令
cursor.execute("select * from admin")
data_list = cursor.fetchall()
for row_dict in data_list:
    print(row_dict)

# 3. 关闭
conn.close()
cursor.close()
  • Django使用内部的ORM框架 。

在这里插入图片描述

14.1安装第三方模块

pip install mysqlclient

14.2 ORM

ORM可以做两件事:

  • 创建、修改、删除数据库中的表
  • 操作表中的数据

14.3 Django连接数据库

在settings.py文件中进行配置和修改。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'unicom',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3306
    }
}

models.py文件配置

from django.db import models


class UserInfo(models.Model):
    name = models.CharField(max_length=30)
    pwd = models.CharField(max_length=64)
    age = models.IntegerField()

"""
    create table app01_userinfo(
    id integer primary key auto_increment,
    name varchar(30),
    password varchar(64),
    age int
    )
"""

Django命令生成数据库表

python manage.py makemigrations
python manage.py migrate

在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:

  1. 手动输入一个值。

  2. 设置默认值。

    age = models.IntegerField(default=2)
    
  3. 允许为空。

    data = models.IntegerField(null = True,blank = True)
    

​ ORM实现增删改查

def orm(request):
    # 增加数据
    # models.UserInfo.objects.create(name="陈34", pwd="123456")

    # 删除数据
    # models.UserInfo.objects.filter(id=2).delete()

    # 获取数据
    # data_list = models.UserInfo.objects.all()
    # for obj in data_list:
    #     print(obj.id, obj.name, obj.pwd, obj.age)

    # 修改数据
    models.UserInfo.objects.filter(id=3).update(age=100)
    return HttpResponse("success")

15.模板的继承

# layout.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.min.css' %}">
</head>
<body>
<!-- 导航栏 -->
<nav class="navbar navbar-default container">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">用户管理系统</a>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="/depart/list/">部门管理</a></li>
                <li><a href="#">Link</a></li>
            </ul>

            <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">CPanMirai <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</nav>

<div>
    {% block content %}

    {% endblock %}
</div>
<script src="{% static 'js/jquery-3.7.1.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.min.js' %}"></script>
</body>
</html>
# index.html

{% extends 'layout.html' %}
{% block content %}
内容
{% endblock %}

16.Django组件

例子

def user_add(request):
    """添加用户"""
    if request.method == "GET":
        content = {
            "gender_choice": models.UserInfo.gender_choices,
            "depart_list": models.Department.objects.all()
        }
        return render(request, "user_add.html", context=content)

Django组件

  • Form组件

    class MyForm(Form):
        user = forms.ModelChoiceField(widget=forms.Input)
        pwd = forms.ModelChoiceField(widget=forms.Input)
        email = forms.ModelChoiceField(widget=forms.Input)
    
    
    def user_add(request):
        """添加用户"""
        if request.method == "GET":
            return render(request, "user_add.html")
    
    <form method="post">
        {{ form.user }}
        {{ form.pwd }}
        {{ form.email }}
    </form>
    
    <form method="post">
        {{% for field in form %}}
        	{{ field }}
        {{ % endfor %}}
    </form>
    
  • ModelForm组件

    class MyForm(Form):
       class Meta:
       		model = UserInfo
            fieleds = ["user","pwd","email"]
    


  • Link

  •         <ul class="nav navbar-nav navbar-right">
                <li><a href="#">登录</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">CPanMirai <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">个人资料</a></li>
                        <li><a href="#">我的信息</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">注销</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
    
    {% block content %}
    {% endblock %}
    
    ```
    # index.html
    
    {% extends 'layout.html' %}
    {% block content %}
    内容
    {% endblock %}
    

    16.Django组件

    例子

    def user_add(request):
        """添加用户"""
        if request.method == "GET":
            content = {
                "gender_choice": models.UserInfo.gender_choices,
                "depart_list": models.Department.objects.all()
            }
            return render(request, "user_add.html", context=content)
    

    Django组件

    • Form组件

      class MyForm(Form):
          user = forms.ModelChoiceField(widget=forms.Input)
          pwd = forms.ModelChoiceField(widget=forms.Input)
          email = forms.ModelChoiceField(widget=forms.Input)
      
      
      def user_add(request):
          """添加用户"""
          if request.method == "GET":
              return render(request, "user_add.html")
      
      <form method="post">
          {{ form.user }}
          {{ form.pwd }}
          {{ form.email }}
      </form>
      
      <form method="post">
          {{% for field in form %}}
          	{{ field }}
          {{ % endfor %}}
      </form>
      
    • ModelForm组件

      class MyForm(Form):
         class Meta:
         		model = UserInfo
              fieleds = ["user","pwd","email"]
      

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

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

相关文章

C++设计模式——Adapter适配器模式

一&#xff0c;适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;用于将已有接口转换为调用者所期望的另一种接口。 适配器模式让特定的API接口可以适配多种场景。例如&#xff0c;现有一个名为"Reader()"的API接口只能解析txt格式的文件&#xff0c;给这…

JavaEE_CAS_Synchronized原理_线程安全集合类

文章目录 一、CAS1.什么是CAS2.CAS有哪些应用1.实现原子类 - AtomicInteger2.基于CAS实现的自旋锁3.CAS的ABA问题 二、Synchronized原理1.基本特点2.偏向锁3.锁消除4.锁粗化 三、JUC(java.util.concurrent)的常见类1.Callable接口2.ReentrantLock3.信号量Semaphore4.CountDownL…

11.7 堆排序

目录 11.7 堆排序 11.7.1 算法流程 11.7.2 算法特性 11.7 堆排序 Tip 阅读本节前&#xff0c;请确保已学完“堆“章节。 堆排序&#xff08;heap sort&#xff09;是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”…

(uniapp)简单带动画的tab切换效果

效果图 代码 <template><view class"tabBox"><view :style"{transform: translateX(${translateX})}" class"whiteBox"></view><view click"changeTab(k)" class"itemBox" v-for"(v,k) in…

安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?

安防视频融合汇聚平台EasyCVR兼容性强&#xff0c;可支持Windows系统、Linux系统以及国产化操作系统等&#xff0c;平台既具备传统安防视频监控的能力&#xff0c;也具备接入AI智能分析的能力&#xff0c;可拓展性强、视频能力灵活&#xff0c;能对外分发RTMP、RTSP、HTTP-FLV、…

【二叉树】Leetcode 222. 完全二叉树的节点个数【简单】

完全二叉树的节点个数 你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最…

273 基于matlab的改进型节点重构小波包频带能量谱与 PNN(概率神经网络)的联合故障诊断新方法

基于matlab的改进型节点重构小波包频带能量谱与 PNN&#xff08;概率神经网络&#xff09;的联合故障诊断新方法。针对风电机组故障信号的非平稳性以及故障与征兆的非线性映射导致的故障识别困难问题&#xff0c;提出了改进型的节点重构小波包频带能量谱与PNN&#xff08;概率神…

C++设计模式-中介者模式,游戏对象之间的碰撞检测

运行在VS2022&#xff0c;x86&#xff0c;Debug下。 31. 中介者模式 中介者模式允许对象之间通过一个中介者对象进行交互&#xff0c;而不是直接相互引用。可以减少对象之间的直接耦合&#xff0c;同时集中化管理复杂的交互。应用&#xff1a;如在游戏开发中&#xff0c;可以使…

【pytorch】大模型训练张量并行

Large Scale Transformer model training with Tensor Parallel (TP) 张量并行如何工作 原始 Tensor Parallel (TP) 模型并行技术于Megatron-LM论文中被提出&#xff0c;是一种用于培育大规模Transformer模型的高效模型并行技术。我们在本练习指南中介绍的序列并行 (SP) 实际…

postgresql常用命令#postgresql认证

PostgreSQL 是一个功能强大的开源关系数据库管理系统&#xff0c;提供了一系列命令行工具来管理和操作数据库。以下是一些常用的 PostgreSQL 命令&#xff0c;涵盖数据库和用户管理、数据操作以及查询和维护等方面。 #PostgreSQL培训 #postgresql认证 #postgreSQL考试 #PG考试…

从零开始:腾讯云轻量应用服务器上部署MaxKB项目(基于LLM大语言模型的知识库问答系统)

使用腾讯云轻量应用服务器部署和使用MaxKB项目 前言 一&#xff0c; MaxKB介绍 MaxKB是基于LLM大语言模型的知识库问答系统&#xff0c;旨在成为企业的最强大脑。它支持开箱即用&#xff0c;无缝嵌入到第三方业务系统&#xff0c;并提供多模型支持&#xff0c;包括主流大模型…

R语言绘图 --- 气泡图(Biorplot 开发日志 --- 4)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形&#xff0c;如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包&#xff08;Biorplot&#xff09;&#xff0c;用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

大数据数据治理工具

大数据数据治理-CSDN博客 大数据数据治理工具&#xff1a; 开源工具&#xff1a; Apache Atlas&#xff1a; 一个开源的数据治理和元数据框架&#xff0c;为Hadoop生态系统提供数据分类、管理和安全功能。 Apache Ranger&#xff1a; 一个集中式安全管理框架&#xff0c;用于…

RPG Maker MV 踩坑十一 精灵及背景绘制问题

精灵绘制问题 RPG Maker MV战斗问题入场飞身战斗背景绘制精灵集及精灵 RPG Maker MV战斗问题 在RMMV中战斗是在场景中调用战斗管理器&#xff0c;通过管理器去操作角色对象行动及精灵的绘制的。 入场飞身 在其中就发现一个问题加载图片进场时&#xff0c;会偏高&#xff0c;…

SSRF及相关例题

SSRF及相关例题 服务端请求伪造&#xff08;Server Side Request Forgery, SSRF&#xff09;指的是攻击者在未能取得服务器所有权限时&#xff0c;利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。 SSR…

NAVICAT从MYSQL链接到ORCAL数据库

1、工具-选线 2、环境&#xff0c;将原有的mysql的oci.dll文件改为oracle的 3、新建连接 填写对应数据

【全开源】Java代驾小程序APP代驾跑腿源码微信小程序代驾源码

&#x1f697;代驾小程序&#xff1a;便捷、安全的出行新选择 一、引言&#xff1a;出行新风尚 在如今繁忙的都市生活中&#xff0c;出行问题一直是人们关注的焦点。代驾小程序的出现&#xff0c;为我们提供了一种便捷、安全的出行新选择。无论是酒后不能驾车&#xff0c;还是…

Visual C++2010学习版详细安装教程(超详细图文)

Visual C 介绍 Visual C&#xff08;简称VC&#xff09;是微软公司推出的一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于开发C和C语言的应用程序。它提供了强大的编辑器、编译器、调试器、库和框架支持&#xff0c;以及丰富的工具和选项&#xff0c;使得开…

opencv dnn模块 示例(26) 目标检测 object_detection 之 yolov10

文章目录 1、yolov10简要介绍1.1、双标签分配策略1.2、架构改进1.3、性能1.4、预训练模型 1.4、网络有关层说明2、测试2.1、官方测试2.2、opencv dnn仅运行到内部"NMS"步骤之前的层完整代码完整实现所有层 2.3、onnxruntime测试3.4、tensorrt 1、yolov10简要介绍 从…

攻防世界---misc---a_good_idea

1、下载附件得到一张图片&#xff0c;winhex分析&#xff0c;发现有压缩包 2、在kali中用普通用户对jpg进行binwalk 3、得到两张图片和一个文本&#xff0c;查看文本信息&#xff1a;提示试着找到像素的秘密 4、提到像素就想到了Stegsolve这个工具&#xff0c;将这两张图片用该…