PythonWeb前端

news2024/11/15 10:57:57

摘要

学校的一门选修课,PythonWeb开发从入门到实践,用到的技术有Python,Flask,MySQL,前端三件套等,但因为是选修课,所以都只涉及到了一点点

Web前端基础

1.Web工作原理

概念:

Web,万维网,一个通过互联网访问,许多互相链接的超文本组成的系统。

Web开发的组成部分,前后端:

  • 前端:HTML,CSS,JS
  • 后端:Python,Java,PEEP等前端看不到的东西

2.HTML基础

具体见:http://t.csdnimg.cn/l0dm0

3.CSS基础

具体见:http://t.csdnimg.cn/Ypeas

课后题:

2be6e12f597743aaa2aa8fce7f08491a.png

1.选择器,及一条或多条声明 。声明由一个属性和一个值组成,冒号分开。

2.元素选择器h1{},类选择器.center{},id选择器#name{},标签类选择器p.center{}

3.字体、颜色等

4.内联样式、内部样式、外部样式

4.JavaScript基础

定义:

JavaScript一种可以嵌入在HTML代码中由客户端浏览器运行的脚本语言,可以实现网页特效和用户动态交互。

和Java之间的关系就像雷锋和雷峰塔

基础语法:

<body>
<script>
//定义变量
var q = '123';      
var qq = "123";
//定义无参函数:
function fun1(){
    console.log("使用function创建函数~~~");
    console.log("哈哈哈");
}
</script>
</body>

JS使用外部文件:

  • 语法格式:<script src='main.js'></script>
  • 优点:便于代码阅读;同时被多个页面调用
//main.js文件:
function reloop()
{
 var time = new Date( ); //获得当前时间
 //获得年、月、日,Date()函数中的月份是从0-11计算
 var year = time.getFullYear();  
 var month = time.getMonth()+1;
 var date = time.getDate();
}
//html文件引入
<head>
<script src='main.js'></script>
</head>

5.JQuery基础

一个快速、小巧且功能丰富的 JavaScript 库。它极大简化了 HTML 文档遍历和操作、事件处理、动画以及 Ajax 交互。

JQuery基本语法:

e81c524c1f44414ba58a324ad366aba8.png

fd2c0daf84f44d74afe330beeedcee3c.png

选择器:

c36897e786874f7e8ead538418b9b16f.png

触发事件:

d840f06d159f41dfba208d13ff3121e6.png

    <script src="./jquery-3.7.1.js"></script>
    <script>
        function di(){
            alert('只是个弹窗');
        }
    </script>
    <script>
        function dic(){
            alert('只是张照片');
        }
         $(document).ready(function() {
            $("img").hover(dic);
<!--鼠标悬停-->
        });
    </script>
<body>
<button onclick="di()" type="submit">出现弹窗</button>
</body>

主要特点和功能:

// 选择所有 p 元素并将其隐藏
$("p").hide();

// 当用户点击按钮时显示一个警告框
$("button").click(function() {
    alert("Button clicked!");
});

// 隐藏一个元素,然后在 1 秒后显示它
$("#myElement").hide().fadeIn(1000);

// 自定义 jQuery 插件示例
(function($) {
    $.fn.greenify = function() {
        this.css("color", "green");
        return this;
    };
})(jQuery);
$("p").greenify();// 使用自定义插件

MySQL数据库基础

简介:

MySQL是一个关系型数据库管理系统。由于windows中对大小写不敏感,方便书写,以下命令均小写。

1.数据库操作命令

增删改查数据库,库命名为字母数字下划线和$

//增
create database db_name;
//查
show databases;
//删
drop database db_name;
//使用数据库
use db_name;
//查看当前数据库
select database();
//查看当前数据库版本
select version();

2.数据表操作命令

//查
show tables from db_name;
//增
create table table_name from db_name(id int(8) NOT NULL,name....);
//查看表
describe table_name;
show columns from db_name.table_name
//增加属性
alter table table_name add gender char(8) NOT NULL;
//删
alter table table_name drop gender;
//删表
drop table table_name;

3.MySQL数据类型

数值型:

3d2a5a59c4234effb577aca4a62d4eaf.png

日期和时间型:

82f414ce2b3d4dbdbf82c4f09c2e03ae.png

字符串类型:

ac40a766ff394e658c1a02fb92492e23.png

drop and delete? 

4.数据增删改查

增加数据:

INSERT INTO table_name(id,name,gender) VALUES('123','frank','male'),
('1234','lili','female');

删除数据:

delete from A where id='3';

修改数据:

update A set name='frank' where id='3';

查看数据:

//查询所有
SELECT * FROM table_name;
//查询某一列
select id,name from table_name;
//多表查询
select A.id,B.name from A,B where A.id=B.id;
//去除重复行
select age distinct from A;
//显示前三行结果 desc降序排列,默认升序
select * from A order by id desc limit 3;
//分组查询,having限定第二个查询条件
select gender avg(price) from A group by gender having avg(price)>50;
//模糊查询,含li的数据
select * from A where like'%li%';
//联合多列
select id,concat(name,':',gender) as info from A;

5.Python操作MySQL

pip install mysql-connector安装完成后进行下面操作:

数据库连接:

//创建数据库连接
import mysql.connector
mydb = mysql.connector.connect(
    host = 'localhost',
    user = 'root',
    password = '1234',  # 改成自己的
    database = 'db_name'
)

创建数据库:

mycursor = mydb.cursor()
mycursor.execute('create database db_name')  # 执行SQL
#关于占位符
mycursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", (value1, value2))

#当data为列表
data = [(value1_1, value2_1), (value1_2, value2_2), ...]
cursor.executemany("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", data)

#如果存在,删除表A
mycursor.execute('drop table if exists A')
print(mycursor.rowcount,'条记录被修改')

#提交事务并关闭连接
mydb.commit()
mycursor.close()
mydb.close()

5bc6dab794a4458eaa16d14b758568bb.png

Web框架基础(Flask)

1.Web框架概述

Web发展历程:

  • 静态页面:浏览器向服务器发送HTTP请求,服务器返回静态HTML信息
  • 动态内容
  • 脚本语言
  • Web框架

简介: 

简化Web开发的软件框架 。提供功能:支持数据库、路由分发、请求处理、模板渲染、安全性

主流框架有:Flask,Django,Tornado

2.初识Flask

介绍:基于python的轻量级、可定制的Web开发框架

Flask微框架的两个主要依赖

  • Werkzeug:WSGI工具库,提供路由、调试和Web服务器网关接口
  • Jinja2:模板渲染库,提供模板
  • 第三方库:其他的由第三方库完成

关于安装:pip install flask==版本号

如何在Pycharm使用就自行百度 ~因为有的是专业版有的是社区版

Flask目录结构: 

  • app.py:主程序,定义路由和视图函数
  • static:存放静态文件如CSS、JS、图片
  • templates:存放HTML文件渲染网页

第一个Flask程序:

写在app.py中 ,点击运行出的URl即可看到浏览器页面显示helloworld

from flask import Flask
app = Flask(__name__)

@app.route('/')  #app.route装饰器中的URL可自由修改,但注意以/开头
# 下面为视图函数,其返回值还可以是HTML标签
# 与上面的URL绑定,视图函数可以绑定多个URL,附加多个装饰器即可
def hello_world():
    return 'helloworld'
if __name__ == '__main__':
    app.run(debug=True,port=5001)  # port设置端口号

URL用于标识和定位互联网上资源的字符串。通常用于在Web浏览器中指定要访问的网页、文件或其他资源的地址。 

一个URL由几个部分组成:

  1. 协议(Protocol):指定了访问资源所使用的协议,如HTTP、HTTPS、FTP等。
  2. 主机名(Host):标识了存储资源的服务器的名称或IP地址。
  3. 端口号(Port):可选的,用于指定连接服务器时使用的端口号,默认值根据协议而定。
  4. 路径(Path):指定了服务器上资源的具体路径或位置。
  5. 查询参数(Query Parameters):可选的,用于向服务器传递额外的参数,以便资源的定制化访问。
  6. 片段标识(Fragment Identifier):可选的,用于指定资源中的具体片段或位置。

Flask项目配置:

#1.通过app.config:
from flask import Flask
app = Flask(__name__)
# 设置 SECRET_KEY
app.config['SECRET_KEY'] = 'your_secret_key_here'

#2.通过update:
app = Flask(__name__)
app.config.update(SECRET_KEY='xxx')

#3.配置模块from_object()
# 所有的配置项放在一个config.py文件中,通过下面代码加载
# 通过模块字符串
app.config.from_object('config.config')
# 通过模块对象
from config import config
app.config.from_object(config)

#4.配置文件from_pyfile()
app.config.from_pyfile('config/config.py',silent=True) #silent表示不存在不跑出

3.Jinja2模板使用

Jinja2渲染模板、参数传递:

简介:

Jinja2是一个模板语言,比较符合Python语法。模板可以理解为一个文件,经过动态赋值(渲染)后返回给用户。

渲染模板:

即执行模板中的代码,并传入所有在模板中使用的变量,渲染结果返回HTML。

使用方式即在视图函数中使用Flask提供的渲染函数render_template()

# 关于jinja2模板的使用
from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")  # 定义路由
def introduce():
    username = ['小明', '小黑']
    gender = '男生'
    school = '清华大学'
    college = 'xx学院'
    profession = {'key1': '人工智能1', 'key2': '人工智能'}
    outlook = 'helloworld'
    return render_template(template_name_or_list='introduce.html',
                           username=username, gender=gender,
                           school=school, college=college,
                           profession=profession, outlook=outlook
                           )
if __name__ == '__main__':
    app.run(debug=True, port=5001)

introduce.html文件:

<body>
<div>
    <h1 align="center">个人介绍</h1>
    <img src="../static/微信图片_20240429212536.jpg" width="130px" align="right" onclick="dic()">
    <br>
    <p>我是:<b>{{username[1]}}</b></p>
    <p>性别:<em>{{gender}}</em></p>
    <p>就读于:<a href="https://www.haut.edu.cn/"></a>{{school}}</p>
    <p>所在学院:<b>{{college}}</b></p>
    <p> 专业:{{profession['key2']}}<br></p>
    <p>简介:{{outlook|length}}</p>
    <button onclick="di()" type="submit">出现弹窗</button>
</div>
</body>

模板参数和模板的控制语句: 

是写在HTML文件里的:

  • 模板参数:使用{{}}表示一个变量,即一个特殊的占位符。变量可以是列表、字典、对象等
  • 控制语句:使用{%%}包围的,常用的控制语句有if、for,由{%end xx%}结束 

过滤器:

相当于一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能在返回相应的值,之后将结果渲染到页面中。管道符号|使用,如{{outlook|length}}

682602f89b584ba58c85e8e606141fcd.png

b2f9fccc95b949738f773b5016cbf308.png 

自定义过滤器:

  • 通过add_template_filter:
#自定义过滤器

def length(args):
    return len(args)

app.add_template_filter(length, name='length')
  • 通过add.template_filter()装饰器实现:
app = Flask(__name__)
@app.template_filter()
def length(args):
    return len(args)

宏的应用和模板的继承:

宏功能类似于Python中函数,可传递参数,但没有函数返回值

宏定义:

包含声明和调用两部分。声明一个宏需要macro和endmacro标志

#标签之间的部分定义了一个名为 greeting 的宏
#该宏接受一个参数 name 并输出一个简单的问候语。

{% macro greeting(name) %}
    Hello, {{ name }}!
{% endmacro %}

#在模板的其他地方,我们可以通过 {{ greeting(...) }} 多次调用这个宏
#并传递不同的参数。
{{ greeting("Alice") }}
{{ greeting("Bob") }}

宏导入:

为方便不同模板使用,将宏放在单独模板文件macros.html,用时导入即可。

// 方法一
{%from 'macros.html' import greeting%}
 
//方法二
{%import 'macros.html' as macros%}
{{macros.greeting(name)}}

宏的include使用:

Jinja2模板继承允许定义一个基模板,把网页通用内容如导航栏,背景通过include放在基模板中,而每一个继承基模板的子模版在渲染时会自动包含这些内容。

//基模板引入方式,将父模板header.html引入到基模板生效
{% include "header.html" %}
{% block content %}{% endblock %} //用于定义一个命名的块的语法

//继承使用extends
{% extends "common.html" %}
{% block content %}
<!--允许子模板重写父模板中定义的块内容。-->
{% endblock %}

{% block content %}{% endblock %} 是在 Jinja2 模板中用于定义一个命名的块的语法。这个语法通常与模板继承结构一起使用,允许子模板重写父模板中定义的块内容。 

 4.蓝图与数据库 

Flask路由:

路由指用户请求的URL与视图函数之间的映射,处理函数与URL之间关系的程序称为路由。分为:

  • 静态路由:路径固定不变。即装饰器里写的url是固定的
  • 动态路由:指带有参数的页面路径。

常见的动态路由类型转换器:

  • string:默认可不用写
  • int、float
  • path:和string相似,但接受斜线          
# 结构:/prefix/<类型转换器:参数>

@app.route('/user/<name>')
def user(name):
    return '<h1>my name is %s</h1>'%name

@app.route('/user/<path:name>')
def user(name):
    return '<h1>my name is %s</h1>'%name

绑定视图函数:

绑定的两种方法:

  • app.route():和上面写的一样
  • app_url_rule():有三个参数,rule设置url,endpoint给url设置的名称,可在代码中引用,view_func指定视图函数的名称
def test():
    return 'hello'
add_url_rule(rule:'/test/',endpoint:'test',view_func=test)

定义类视图函数 :

  • 定义一个视图类,继承于Flask.views.View
  • 视图类中定义方法dispatch_request,处理请求,返回HTML文本给客户端
  • 使用app_url_rule()绑定url和视图类

Flask蓝图:

蓝图,组织Flask应用程序代码的方式,允许将程序代码分成更小的模块,这些模块用于构建更大的应用程序。

步骤:

  • 创建蓝图对象:使用Blueprint类
  • 定义视图函数:定义蓝图中的视图函数
  • 注册蓝图:即将蓝图对象和URL前缀绑定在一起,app.register_blueprint
#写在__init__.py

#创建Flask蓝图、定义视图函数
from flask import Blueprint

home = Blueprint('home',__name__)

@home.route('/')
def index():
    return 'hello'

上述代码创建了一个home的蓝图对象,并定义了一个路由视图函数index。下面在应用程序中注册该蓝图,并将其绑定到/home下: 

# 写在app.py
# 注册蓝图
from flask import Flask
from home import home

app = Flask(__name__)
app.register_blueprint(home, url_prefix='/home')  # url中写入的才是转入要用的


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

Flask-SQLAIchemy:

SQLAIchemy,一个数据库抽象层和数据库关系映射包,通常使用Flask-SQLAIchemy来操作。

安装依旧是pip install Flask-SQLAIchemy

连接数据库并创建表 :

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URL'] = 'mysql+pymysql://root:yourpassword@localhost:3306/db_name'
db = SQLAlchemy(app)

#定义数据库模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

if __name__ == '__main__':
    with app.app.context():
        db.create_all()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第21篇 Intel FPGA Monitor Program的使用<四>

Q&#xff1a;如何编译运行创建好的Intel FPGA Monitor Program工程呢&#xff1f; A&#xff1a;上一篇的Nios II汇编语言简易应用程序创建完成后&#xff0c;点击Intel FPGA Monitor Program的Action-->Compile即编译程序&#xff0c;在Info&Errors区域显示编译结果…

软件产品进行确认测试有什么好处?第三方软件测试机构分享

软件确认测试是一项旨在验证软件是否符合预期需求和规格的测试活动。通过确认测试&#xff0c;您可以确保软件的功能、性能和用户界面的符合程度&#xff0c;从而降低软件发布后出现问题的风险。 一、软件产品进行确认测试的好处   1、减少软件发布后修复问题的成本。通过及…

SpringBoot整合Minio(支持公有及私有bucket)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBoot整合Minio(支持公有及私有bucket) ⏱️ 创作时间&#xff1…

机器学习课程复习——决策树

Q:这三个算法哪一个可以用来做回归? CART Q:这学期学过的分类算法有哪些? 支持向量机、决策树、k近邻、逻辑回归、朴素贝叶斯、ANN (注意区分分类算法与聚类算法) Q:计算题 根据以上条件,生成相应的决策树 1. ID3算法

Jenkins教程-5-gitee自动化测试任务构建

上一小节我们学习了Jenkins构建gitlab自动化测试任务的方法&#xff0c;本小节我们讲解一下gitee自动化测试任务的构建方法。 接下来我们以windows系统为例&#xff0c;讲解一下构建实际自动化测试任务的具体步骤。 安装git和gitee插件 点击进入Jenkins插件管理页面 安装完插…

mac禁用电池睡眠-mac盒盖连接显示器

mac禁用电池睡眠-mac盒盖连接显示器-mac断点盒盖连接显示器 讲解&#xff1a;mac盒盖的时候连接显示器会睡眠并断开和显示器的连接&#xff0c;只有在电池->选项->选择使用电源适配器的时候防止睡眠&#xff0c;才可以连接电源线外界显示器 但是苹果的电池相当于手机电…

Linux使用lrzsz实现虚拟机和本机进行文件传输

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、lrzsz是什么&#xff1f;二、使用步骤1.下载lrzsz2.文件传输 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 使用lrzsz代替xfpt进行…

大模型时代的具身智能系列专题(一)

通用具身机器人 具身智能定义 从图灵定义看&#xff0c;知识由感知、智能体环境交互获得&#xff0c;具身智能要拥有足够的知识完成机器人任务。从字面上理解就是具有身体的智能&#xff0c;可以从交互中学习并有可能涌现新能力。近期的具身智能更多和大模型和端到端有关&…

KVB投资安全小知识:你知道情绪面、技术面与基本面的关系吗?

摘要&#xff1a;当涉及到金融市场分析时&#xff0c;情绪面、技术面和基本面是三个重要的方面。它们相互交织&#xff0c;共同影响着市场的走势和投资者的决策。下面我来详细解释它们之间的关系。 情绪面的影响 情绪面指的是投资者情绪和市场情绪&#xff0c;它反映了市场参与…

曾从钦:共同做大露酒产业蛋糕,共建露酒产业命运共同体

执笔 | 尼 奥 编辑 | 扬 灵 6月15日&#xff0c;由中国酒业协会主办、五粮液股份公司承办的以“文化焕新&#xff0c;价值绽放”为主题的第三届中国露酒T5峰会在四川省宜宾市召开&#xff0c;参会企业对当前露酒产业现状、结构性矛盾、品类价值表达等议题进行深入探讨和交…

ARM功耗管理框架之LPI

安全之安全(security)博客目录导读 思考&#xff1a;功耗管理框架&#xff1f;SCP&#xff1f;PPU&#xff1f;LPI&#xff1f;之间的关系&#xff1f;如何配合&#xff1f; 目录 一、功耗管理框架中的LPI 二、LPI分类 三、Q-Channel和P-Channel对比 四、Q-Channel和P-Ch…

QT/基于TCP的服务端实现

代码 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),p(new QTcpServer(this))//给服务器指针申请空间 {ui->setupUi(this); }Widget::~Widget() {delete ui; }void W…

VM安装Ubuntu

系统安装 先安装好VM软件&#xff08;版本> 17&#xff09; 创建新的虚拟机 步骤1&#xff1a; 步骤2&#xff1a;&#xff08;选择好对应的ISO&#xff0c;可以去官网下载&#xff09; 注意&#xff1a;ISO文件要放到 英文目录&#xff08;路径中不能有中文和空格&#…

Qt打包成单独一个.exe文件运行

程序发布 1、首先找到你所运行的Qt编译器 2、然后去项目位置找到对应的release目录下的exe文件 3、将这个exe文件复制到一个单独的文件夹下&#xff0c;这里我放在E盘的demo下面 4、右键选择在终端打开PowerShell进入步骤1新建的demo目录内 5、windeployqt 项目名.exe windepl…

【FreeRTOS】估算栈的大小

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 估算栈的大小回顾简介计算说明估计函数用到的栈有多大合计 估算栈的大小 回顾 上一篇文章链接&#xff1a;http://t.csdnimg.cn/Cc8b4 传送门: 上一篇文章 上一篇文章创建的三个任务 /* 创建任务&#xff1a;声 *…

图像处理之几何变换

一、柱形畸变 import cv2 import numpy as npdef cylindrical_projection(image, f):h, w = image.shape[:2]map_x, map_y = np.meshgrid(np.arange(w), np.arange(h))x_c = w / 2y_c = h / 2theta = (map_x - x_c) / fh_c = (map_y - y_c) / np.sqrt((map_x - x_c)**2 + f**2…

音视频入门基础:H.264专题(3)——EBSP, RBSP和SODB

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

亚特全球链锯文化推广大使活动盛大启航

&#xff08;本台记者报&#xff09;链锯&#xff0c;这一象征着力量与技艺的工具&#xff0c;自诞生以来便见证了人类工业文明的进步。从最初的简易链锯到如今的多功能锂电链锯&#xff0c;彰显了人类对于技艺与科技的追求&#xff0c;其演变历程不仅映射出人类科技的巨大飞跃…

CSS3基本语法

文章目录 一、CSS引入方式二、选择器1、标签选择器2、类选择器3、id选择器4、通配符选择器 三、字体操作1、字体大小2、字体粗细3、字体样式&#xff08;是否倾斜&#xff09;4、字体修改常见字体系列 修改字体系列语法 四、文本操作1、文本缩进2、文本水平对齐方式3、文本修饰…

HarmonyOS Next 系列之从手机选择图片或拍照上传功能实现(五)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…