PythonWeb前端

摘要

学校的一门选修课,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_templateapp = 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 Blueprinthome = Blueprint('home',__name__)@home.route('/')
def index():return 'hello'

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

# 写在app.py
# 注册蓝图
from flask import Flask
from home import homeapp = 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 SQLAlchemyapp = 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.mzph.cn/diannao/32381.shtml

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

相关文章

关于运用人工智能帮助自己实现英语能力的有效提升?

# 实验报告 ## 实验目的 - 描述实验的目标&#xff1a;自己可以知道&#xff0c;自己的ai学习方法是否可以有效帮助自己实现自己的学习提升。 预期结果&#xff1a;在自己利用科技对于自己进行学习的过程中&#xff0c;自己的成长速度应该是一个幂指数的增长 ## 文献回顾 根据…

Docker:centos79-docker-compose安装记录

1.安装环境&#xff1a;centos7.9 x86 2.安装最新版&#xff1a; [rootlocalhost ~]# curl -fsSL get.docker.com -o get-docker.sh [rootlocalhost ~]# sh get-docker.sh # Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8desh -c yum in…

记一次网站违规风险百度统计被禁用的经历及解决方法

今天登陆百度统计&#xff0c;提示&#xff1a;网站由于存在合规风险将被暂停使用百度统计服务。 为了满足法律法规及政府监管的最新规定和要求&#xff0c;保护广大网民的合法权益&#xff0c;您的网站由于存在合规风险将被暂停使用百度统计服务。违规域名&#xff1a;xxxxxx.…

IF膨胀时代,“水刊”当赢?2023热门“水刊”影响因子详解!

【欧亚科睿学术】 1 “四大水刊”详情 图片来源&#xff1a;欧亚科睿学术整理 “四大水刊”的影响因子均有所下跌&#xff0c;其中&#xff0c;曾经被列入中科院预警名单的期刊MEDICINE&#xff0c;其影响因子已是连续三年持续下降。从JCR分区来看&#xff0c;四本期刊分区均…

迈巴赫S480升级增强现实AR抬头显示hud比普通抬头显示HUD更好用吗

增强AR实景抬头显示HUD&#xff08;Augmented Reality Head-Up Display&#xff09;是一种更高级的驾驶辅助技术&#xff0c;相比于普通抬头显示HUD&#xff0c;它提供了更丰富、更具沉浸感的驾驶体验。以下是它比普通抬头显示HUD多的一些功能&#xff1a; • 信息呈现方式&am…

MySQL数据库笔记(二)

第一章 单行函数 1.1 什么是函数 函数的作用是把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中使用函数,极大地提高了用户对数据库的管理效率。 1.2 定义 操作数据对象。 接受参数返回一个结果。 只对一行进行…

【React】AntD组件的使用--极客园--02.登录模块

基本结构搭建 实现步骤 在 Login/index.js 中创建登录页面基本结构在 Login 目录中创建 index.scss 文件&#xff0c;指定组件样式将 logo.png 和 login.png 拷贝到 assets 目录中 代码实现 pages/Login/index.js import ./index.scss import { Card, Form, Input, Button }…

Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)

目录 Nginx 开始 概述 安装&#xff08;非 Docker&#xff09; 配置环境变量 常用命令 配置文件概述 location 路径匹配方式 配置反向代理 实现效果 准备工作 具体配置 效果演示 配置负载均衡 实现效果 准备工作 具体配置 实现效果 其他负载均衡策略 配置动…

VUE3脚手架工具cli配置搭建及创建VUE工程

1、VUE的脚手架工具(CLI&#xff09; 开发大型vue的时候&#xff0c;不能通过html编写一个大型的项目&#xff0c;这个时候需要用到vue的脚手架工具 通过vue的脚手架&#xff0c;可以快速的生成vue工程 1.1、安装nodejs和npm 【下载nodejs】 https://nodejs.org/en 【安装…

IDEA快速入门06-插件

六、插件 6.1 IDEA插件介绍和管理 手动演示IDEA中怎么下载插件&#xff0c;管理插件等。 File -> Settings -> Plugins 6.2 Alibaba Java Coding Guidelines 6.2.1 实时检查 6.2.2 主动检查 选中【项目名称】或者【某一个具体类】&#xff0c;右键点击【编码规约扫…

atcoder abc 358

A welcome to AtCoder Land 题目&#xff1a; 思路&#xff1a;字符串比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {string a, b;cin >> a >> b;if(a "AtCoder" && b "Land") cout <&…

汽车OTA--Flash RWW属性为什么这么重要

目录 1. OTA与RWW 1.1 FOTA需求解读 1.2 什么是RWW 2.主流OTA方案 2.1 单Bank升级 2.2 基于硬件A\B SWAP的FOTA方案 2.3 基于软件实现的FOTA方案 3.小结 1. OTA与RWW 1.1 FOTA需求解读 CP AUTOSAR R19-11首次提出了FOTA的概念&#xff0c;针对FOTA Target ECU提出了多…

状态压缩DP——AcWing 291. 蒙德里安的梦想

状态压缩DP 定义 状态压缩DP是一种利用二进制数来表示状态的动态规划算法。它通过将状态压缩成一个整数&#xff0c;从而减少状态数量&#xff0c;提高算法效率。 运用情况 状态压缩DP通常用于解决具有状态转移和最优解性质的问题&#xff0c;例如组合优化、图论、游戏等问…

AI大眼萌探索 AI 新世界:Ollama 使用指南【1】

在人工智能的浪潮中&#xff0c;Ollama 的出现无疑为 Windows 用户带来了一场革命。这款工具平台以其开创性的功能&#xff0c;简化了 AI 模型的开发与应用&#xff0c;让每一位爱好者都能轻松驾驭 AI 的强大力量。大家好&#xff0c;我是AI大眼萌&#xff0c;今天我们将带大家…

GPT-4o一夜被赶超,Claude 3.5一夜封王|快手可灵大模型推出图生视频功能|“纯血”鸿蒙大战苹果AI|智谱AI“钱途”黯淡|月之暗面被曝进军美国

快手可灵大模型推出图生视频功能“纯血”鸿蒙大战苹果AI&#xff0c;华为成败在此一举大模型低价火拼间&#xff0c;智谱AI“钱途”黯淡手握新“王者”&#xff0c;腾讯又跟渠道干上了“美食荒漠”杭州&#xff0c;走出一个餐饮IPOGPT-4o一夜被赶超&#xff0c;Anthropic推出Cl…

力扣SQL50 查询结果的质量和占比 AVG(条件)

Problem: 1211. 查询结果的质量和占比 &#x1f468;‍&#x1f3eb; 参考题解 Code select query_name,round(avg(rating/position),2) as quality,round(100 * avg(rating < 3), 2) as poor_query_percentage from Queries group by query_name -- 到此结束过不了最后一…

PHP发送HTML邮件的步骤?设置模板的技巧?

PHP发送HTML邮件怎么设置模板&#xff1f;如何用PHP群发邮件&#xff1f; PHP提供了强大的功能来发送HTML格式的电子邮件&#xff0c;这在需要发送格式化内容的邮件时特别有用。AokSend将详细介绍PHP发送HTML邮件的步骤&#xff0c;涵盖了必要的准备工作和实际操作过程。 PHP…

MySQL操作语句练习【经典20题】

emp 表视图 dept 表视图 题目 1.请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名、工资。 2.请在EMP表中查找部门号在10&#xff0d;30之间的雇员的姓名、部门号、工资、工作。 3.请从表EMP中查找姓名以J开头所有雇员的姓名、工资、职位。 4.请从表EMP中查找工资低…

ffmpeg音视频开发从入门到精通——ffmpeg日志及目录操作

文章目录 FFMPEG1. 操作日志2. 文件移动和删除3. 操作目录重要函数 FFMPEG 1. 操作日志 日志级别 AV LOG ERROR AV LOG WARNING AV LOG INFO AV LOG DEBUG cmake_minimum_required(VERSION 3.27) project(FFmpeg_exercise) set(CMAKE_CXX_STANDARD 14)# 定义FFmpeg的安装路…

转--Hadoop集群部署案例

模块简介 本模块主要练习Hadoop集群部署。 模块知识 ● 使用Linux基础命令 ● Hadoop集群搭建部署知识 环境准备 三台CentOS7操作系统的虚拟机 可以是3个Docker容器&#xff0c;也可以是三个VMWare/VirtualBox的虚拟机。三台虚拟机的最低配置为1核1G 20G。如果是虚拟机中…