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_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()

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

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

相关文章

【第25章】Vue实战篇之用户登出

文章目录 前言一、后端代码二、前端代码1.接口调用2.界面代码3.事件代码 三、效果总结 前言 这里来演示用户登出。 一、后端代码 /*** 登出* param token token* return Result*/RequestMapping("logout")public Result logout(RequestHeader("Authorization&…

nginx启动之后任务管理器里面没有nginx进程

原因1&#xff1a;确保你的nginx文件夹里面只包含英文路径&#xff01;绝对不能有中文&#xff01; 原因2&#xff1a; 到conf\nginx.conf里面查看端口和IP地址是否正确设置&#xff0c;ip地址有无正确输入

疯狂刷题python版 | 使用PySide6自制刷题软件【源码+解析】

疯狂刷题python版 | 使用PySide6自制刷题软件【源码解析】 一、前言二、思考三、软件设计四、软件实现&#xff08;一&#xff09;使用QWebEngineView控件通过JavaScript代码和chrome内核进行数据交互和逻辑控制&#xff08;二&#xff09;用户分别通过浏览器 GUI和PySide6 GUI…

2024全国高校名单发布,电子版下载!

今天&#xff0c;教育部网站发布了《全国高等学校名单》。截至2024年6月20日&#xff0c;全国高等学校共计3117所&#xff0c;其中&#xff1a;普通高等学校2868所&#xff0c;含本科学校1308所、高职&#xff08;专科&#xff09;学校1560所&#xff1b;成人高等学校249所。本…

qt 简单实验 读取json格式的配置文件

1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> //读取json数据的配置文件QJsonObject readJsonConfigFile(const QString …

[图解]建模相关的基础知识-15

1 00:00:01,030 --> 00:00:05,820 接下来&#xff0c;我们就开始讲解的知识点 2 00:00:05,830 --> 00:00:11,810 就是范式知识点 3 00:00:12,130 --> 00:00:17,490 关系这个理论里面&#xff0c;随着历史的发展 4 00:00:17,700 --> 00:00:21,280 它发展出很多的…

开源与在线 M3U8 Downloader 项目介绍及使用指南

M3U8 是一种用于播放列表格式的文件类型&#xff0c;广泛应用于流媒体服务中&#xff0c;特别是 HLS&#xff08;HTTP Live Streaming&#xff09;协议。它包含了一系列的 TS&#xff08;Transport Stream&#xff09;视频片段地址&#xff0c;使得视频能够分段加载&#xff0c…

【学习笔记】CSS

CSS 1、 基础篇 1.1、选择器 1.2、长度单位 1.3、CSS2 常用属性 1.4、盒模型 1.5、浮动 1.6、定位 position2、 CSS3 2.1、新增长度单位 2.2、新增颜色表示 2.3、新增选择器 2.4、新增盒子属性 2.5、新增背景属性 …

Apriori 处理ALLElectronics事务数据

通过Apriori算法挖掘以下事务集合的频繁项集&#xff1a; 流程图 代码 # 导入必要的库 from itertools import combinations# 定义Apriori算法函数 def apriori(transactions, min_support, min_confidence):# 遍历数据&#xff0c;统计每个项的支持度 item_support {}for tr…

触想工业一体机在智慧医疗智能采血管理系统中的应用

一、行业发展前景 作为医院重点科室之一&#xff0c;传统的检验科采血环节存在诸多痛点&#xff0c;特别在备管阶段&#xff0c;大量患者信息的核对、试管条码打印、选管、贴标等繁琐步骤均依赖人工操作&#xff0c;工作强度大、效率低&#xff0c;易出错。 随着智慧医院建设的…

解锁PDF处理新境界:轻松调整字体,让你的文档焕然一新!

数字化时代&#xff0c;PDF文件已经成为我们日常办公和学习中不可或缺的一部分。它们为我们提供了方便的阅读体验&#xff0c;同时也保证了文档内容的完整性和格式的统一性。然而&#xff0c;有时候我们可能会遇到一个问题&#xff1a;如何轻松调整PDF文件中的字体&#xff0c;…

Microsoft Edge无法启动搜索问题的解决

今天本来想清一下电脑&#xff0c;看到visual studio2022没怎么用了就打算卸载掉。然后看到网上有篇文章说进入C盘的ProgramFiles&#xff08;x86&#xff09;目录下的microsoft目录下的microsoft visual studio目录下的install目录中&#xff0c;双击InstallCleanup.exe&#…

Git简单使用和理解

workspace: 本地的工作目录。 index/stage&#xff1a;暂存区域&#xff0c;临时保存本地改动。 local repository: 本地仓库&#xff0c;只想最后一次提交HEAD。 remote repository&#xff1a;远程仓库。 对于Git,首先应该明白第一git是一种分布式版本控制系统&#xff0c;最…

Instagram APIj接口——快速获取Ins帖子媒体内容下载链接

一、引言 在社交媒体蓬勃发展的今天&#xff0c;Instagram已成为用户分享照片、视频和精彩瞬间的首选平台。然而&#xff0c;对于很多用户来说&#xff0c;想要保存或分享Instagram上的精彩内容却常常遇到困扰。为了解决这个问题&#xff0c;我们精心打造了一款全新的Instagra…

天马学航——智慧教务系统(移动端)开发日志八

天马学航——智慧教务系统(移动端)开发日志八 日志摘要&#xff1a;完成了对用户主界面的优化&#xff0c;再次优化数据库缓存&#xff0c;使数据库读写分离 优化主界面 优化用户界面&#xff0c;使界面看起来更加亲切贴合 主要源码 build() {Row() {Column({space:30}) {Te…

软件工程考试题备考

文章目录 前言一、二、1.2 总结 前言 一、 B D C 类图、对象图、包图 其他系统及用户 功能需求 用例 人、硬件或其他系统可以扮演的角色7. D C 数据 原型/系统原型;瀑布 A 功能;功能需求 D 数据存储;圆形/圆角矩形;矩形 C T;T;F C C B C D C …

基于淘宝商城用户购物行为数据分析系统

摘 要 在电商行业高速发展的今天&#xff0c;用户购物行为数据量呈指数型增长&#xff0c;传统的数据处理架构已经无法满足于现如今的数据处理需求。针对于这样的需求本课题设计了一种基于淘宝的用户购物行为分析系统&#xff0c;旨在通过对大量数据进行分析处理进而深入研究用…

11、鸿蒙学习—UDID获取方法

一、手机的UDID获取方法如下&#xff1a; 1、打开“设置 > 关于手机”&#xff0c;多次点击版本号&#xff0c;打开开发者模式。 2、打开“设置 > 系统和更新”&#xff0c;在最下方找到“开发人员选项”&#xff0c;打开“USB调试”开关。 3、使用PC连接手机后&#…

【单片机】Code Composer Studio Linux版本下载,CCS开发环境

被windows的驱动兼容性搞得烦死了&#xff0c;我直接搞虚拟机用linux版本的ccs尝试一下。 下载&#xff1a; https://www.ti.com/tool/download/CCSTUDIO ubuntu22 虚拟机内&#xff0c;安装一些依赖&#xff1a; 安装libc6-i386库&#xff1a; 运行以下命令来安装libc6-i38…

银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务

银河麒麟官网地址&#xff1a;国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令&#xff1a;nkvers 我的是 release V10 (SP1)&#xff0c;根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找&#xff0c; 要是随便找个Centos的rp…