当前位置: 首页 > news >正文

网站注册实名制怎么做国内做网站比较好的公司

网站注册实名制怎么做,国内做网站比较好的公司,凡科网站模板,wordpress 国内最好主题Flask简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没…

Flask简介

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

安装

pip install flask -i https://mirrors.aliyun.com/pypi/simple

创建项目

image-20240930101751765

项目目录结构

image-20240930101830580

static

存放静态文件

templates

存放jinja2模板文件

app.py

项目启动入口

基本内容如下:

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():  # put application's code herereturn 'Hello World!'if __name__ == '__main__':app.run()

启动项目并访问

启动

image-20240930102230607

默认端口是5000

image-20240930102251985

访问

image-20240930102323016

修改配置

debug模式

  1. 开启debug模式后,修改代码保存,就会自动重新加载,不需要手动重启项目
  2. 开发的时候出现bug,开启debug模式,会在浏览器上看到出错信息

image-20240930102905555

image-20240930102949728

修改host

就是让其他电脑访问自己电脑上的flask项目

image-20240930104120774

image-20240930104150171

修改port端口号

image-20240930104621554

image-20240930104650120

路由和视图的映射

无参路由

类似于这样:

@app.route('/')@app.route('/login')

有参路由

@app.route('/blog/<blog_id>')
def get_blog(blog_id):return f'您获取的博客id是:{blog_id}'

image-20240930105729346

可以为参数定义类型

@app.route('/blog/<int:blog_id>')
def get_blog(blog_id):return f'您获取的博客id是:{blog_id}'
不定参数

需求:

/book/list:返回首页数据

/book/list?page=2:返回第二页数据

@app.route('/book/list')
def book_list():# 如果无参数 默认是1page = request.args.get("page", default=1, type=int)return f"当前是第{page}页"

无参数

image-20240930110539223

有参数

image-20240930110604737

Jinja2模板渲染

Jinja2 是一个强大的 Python 模版引擎,主要用于生成HTML或其他文本文件。这个库非常适合开发动态网站和Web应用的视图层,因为它支持逻辑操作如循环和条件判断,还可以继承和重用模板。Jinja2以其灵活性和性能著称。

在templates文件夹中创建html文件

image-20240930142426929

加载html文件

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def hello_world():  # put application's code herereturn render_template("index.html")if __name__ == '__main__':app.run()

测试

image-20240930142611894

向html中传参

编写路由代码
@app.route("/blog/<id>")
def get_blog(id):return render_template("blog_detail.html", blog_id=id)
编写前端代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>博客详情</title>
</head>
<body>
<h1>获取的博客编号是:{{ blog_id }}</h1>
</body>
</html>
测试

image-20240930143352218

模板访问对象属性

构建类和字典
class User:def __init__(self, name, age):self.name = nameself.age = age@app.route('/')
def hello_world():  # put application's code hereuser = User("yohoo", 28)person = {"username": "zz","password": "123"}return render_template("index.html", user=user, person=person)
前端代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>首页</title>
</head>
<body>
<h2>yohoo的测试首页</h2>
<h3>姓名:{{ user.name }}</h3>
<h3>年龄:{{ user.age }}</h3>
<hr>
<h3>用户名:{{ person.username }}</h3>
<h3>密码:{{ person.password }}</h3>
</body>
</html>
测试

image-20240930144603779

遍历列表

创建列表
@app.route("/books")
def get_books():books = ['python', 'go', 'java']return render_template("books.html", book_list=books)
前端代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>图书列表</title>
</head>
<body>
<ul>{% for b in book_list %}<li>{{ b }}</li>{% endfor %}
</ul>
</body>
</html>
测试

image-20240930151543091

过滤器

变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为后一个过滤器的输入。

计算字符串长度
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>过滤器</title>
</head>
<body>
<h2>{{ a }}-字符串长度{{ a|length }}</h2>
</body>
</html>
自定义过滤器
# 自定义过滤器
def date_format(value, format="%Y-%m-%d"):return value.strftime(format)app.add_template_filter(date_format, "dformat")@app.route("/format_time")
def format_time():t = datetime.now()return render_template("date.html", t=t)

前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h2>{{ t|dformat }}</h2>
</body>
</html>

条件判断

格式
{% if 条件1 %}语句块1
{% elif 条件2 %}语句块2
{% else %}不符合所有条件
{% endif %}
代码
@app.route("/str_test")
def str_test():l = ['sss', 'dfdsfdfdf', 'eteet', 'fffffff']return render_template("demo01.html", l=l)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<ul>{% for s in l %}{% if s|length > 6 %}<li>{{ s }}</li>{% elif s|length > 4 %}<li>大于4</li>{% else %}<li>小于等于4</li>{% endif %}{% endfor %}
</ul>
</body>
</html>

测试

image-20240930162434520

模板继承

子页面继承父页面

格式

父页面内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock %}</title>
</head>
<body>
<ul><li>python</li><li>java</li>
</ul>{% block body %}
{% endblock %}
</body>
</html>

子页面1

{% extends "father.html" %}{% block title %}
我是子模版1标题
{% endblock %}{% block body %}
我是子模版1内容
{% endblock %}

子页面2

{% extends "father.html" %}{% block title %}
我是子模版2标题
{% endblock %}{% block body %}
我是子模版2内容
{% endblock %}
代码
@app.route("/child1")
def child1():return render_template("child1.html")@app.route("/child2")
def child1():return render_template("child2.html")
测试

image-20241008151937869

image-20241008152007503

加载静态文件

格式

img标签

<img src="{{ url_for('static',filename='文件地址') }}">

link标签

<link rel="stylesheet" href="{{ url_for('static',filename='文件地址') }}">

script标签

<script src="{{ url_for('static',filename='文件地址') }}"></script>
代码

静态文件目录结构

image-20241008154707268

static.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="{{ url_for('static',filename='js/hello.js') }}"></script><link rel="stylesheet" href="{{ url_for('static',filename='css/demo.css') }}">
</head>
<body>
<div id="container"><h2>测试</h2>
</div>
<img src="{{ url_for('static',filename='images/lol.jpg') }}">
</body>
</html>

后端代码

@app.route("/static")
def static_demo():return render_template("static.html")
测试

js生效

image-20241008154925460

css和图片生效

image-20241008155205396

Flask连接MySQL数据库

选择mysql驱动和orm

pip install pymysql -i https://mirrors.aliyun.com/pypi/simple
pip install flask-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple

整体代码

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import textapp = Flask(__name__)
# 主机名
HOSTNAME = "127.0.0.1"
# 端口
PORT = 3306
# 用户名
USERNAME = "root"
# 密码
PASSWORD = "xxxx"
# 数据库名称
DATABASE = "database_learn"
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:" \f"{PORT}/{DATABASE}?charset=utf8mb4"# 在app.config中设置好连接数据库的信息,
# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
db = SQLAlchemy(app)# 测试数据库是否连接成功
with app.app_context():with db.engine.connect() as conn:rs = conn.execute(text("select 1"))print(rs.fetchone())if __name__ == '__main__':app.run()

成功显示

image-20241008161540962

ORM模型与表映射

ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射。主要实现模型对象到关系数据库数据的映射。ORM提供了一种面向对象操作数据库的方式给开发者。不需要编写原生SQL语句也能操作数据库,实现了业务代码与底层数据的解耦。

优点

只需要面向对象编程, 不需要面向数据库编写SQL.
对数据库的操作都转化成对类/对象的属性和方法的操作. 表字段—>对象属性, SQL关键字-> 操作方法
不用编写各种数据库的原生sql语句,当然,也可以编写原生SQL语句。
实现了数据模型代码与数据库数据的解耦, 屏蔽了不同数据库操作上的差异
不再需要关注当前项目使用的是哪种数据库。
通过简单的配置就可以轻松更换数据库, 而不需要修改业务代码.

创建User类
class User(db.Model):__tablename__ = "user"id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)
创建表
with app.app_context():db.create_all()
测试

数据库生成user表

image-20241008163356553

ORM模型的CRUD操作

添加

代码

@app.route("/user/add")
def add_user():user = User(username="yohoo", password="123")db.session.add(user)db.session.commit()return "用户添加成功"

测试

image-20241008164058046

查询

代码

@app.route("/user/query")
def query_user():# 1.get查找: 根据主键查找user = User.query.get(1)print(f"{user.id}:{user.username}:{user.password}")# 2.filter_by查找users = User.query.filter_by(username="yohoo")for user in users:print(user.username)print(user.password)print(user.id)return "数据查询成功"

测试

image-20241008164905154

修改

代码

@app.route("/user/update")
def update_user():# 主键存在的情况可以使用user = User.query.get(1)user.password = "111"db.session.commit()return "用户修改成功"

测试

image-20241008165706661

删除

代码

@app.route("/user/delete")
def delete_user():user = User.query.get(1)db.session.delete(user)db.session.commit()return "删除用户成功"

测试

image-20241008170003650

ORM模型外键与表关系

创建带有外键的类
class Article(db.Model):__tablename__ = "article"id = db.Column(db.Integer, primary_key=True, autoincrement=True)title = db.Column(db.String(200), nullable=False)content = db.Column(db.Text, nullable=False)# 添加作者外键author_id = db.Column(db.Integer, db.ForeignKey("user.id"))# backref自动给user模型自动添加article属性,用来获取文件列表author = db.relationship("User", backref="articles")
新增文章

代码

@app.route("/article/add")
def article_add():article1 = Article(title="学习python", content="非常值得读取")article1.author = User.query.get(2)article2 = Article(title="学习java", content="从入门到精通")article2.author = User.query.get(2)db.session.add_all([article1, article2])db.session.commit()return "文章添加成功"

测试

image-20241008175751527

通过用户id查找文章

代码

@app.route("/article/query")
def query_article():user = User.query.get(2)for article in user.articles:print(article.title)return "文章查找成功"

测试

image-20241008180302750

flask-migrate迁移ORM模型

db.create_all只能处理新增的表模型,如果在已经存在的模型上新增字段就不能更新了

这里使用flask-migrate来处理

安装
pip install flask-migrate -i https://mirrors.aliyun.com/pypi/simple
导入
from flask_migrate import Migrate
使用
migrate = Migrate(app, db)

ORM映射三部曲

第一

flask db init

第二(识别ORM模型的改变,生成迁移脚本)

flask db migrate

第三(运行迁移脚本,同步到数据库中)

flask db upgrade

案例

class User(db.Model):__tablename__ = "user"id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)email = db.Column(db.String(100), nullable=False)

新增email字段

执行三部曲

image-20241008181637096

结果

image-20241008181655855


文章转载自:
http://dinncorurp.knnc.cn
http://dinncodormant.knnc.cn
http://dinncoriches.knnc.cn
http://dinncomultirole.knnc.cn
http://dinncothurberesque.knnc.cn
http://dinncotitoism.knnc.cn
http://dinncotempering.knnc.cn
http://dinncosonolyze.knnc.cn
http://dinncoturbinoid.knnc.cn
http://dinncoromanes.knnc.cn
http://dinncoanguiform.knnc.cn
http://dinncomineralocorticoid.knnc.cn
http://dinncohooter.knnc.cn
http://dinncoracetrack.knnc.cn
http://dinncozu.knnc.cn
http://dinncooutwards.knnc.cn
http://dinncodriving.knnc.cn
http://dinncopolygon.knnc.cn
http://dinncodolorimetry.knnc.cn
http://dinncododecasyllable.knnc.cn
http://dinncosophomoric.knnc.cn
http://dinnconotornis.knnc.cn
http://dinncorationalist.knnc.cn
http://dinncosupracellular.knnc.cn
http://dinncoplaybox.knnc.cn
http://dinncosaceur.knnc.cn
http://dinncosaxicolous.knnc.cn
http://dinncolowing.knnc.cn
http://dinncoconcertina.knnc.cn
http://dinncoectogenous.knnc.cn
http://dinncocumbria.knnc.cn
http://dinncolatania.knnc.cn
http://dinncoamperometer.knnc.cn
http://dinncomeshach.knnc.cn
http://dinncomyopathy.knnc.cn
http://dinncoriposte.knnc.cn
http://dinncovisla.knnc.cn
http://dinncothreeman.knnc.cn
http://dinncoschlimazel.knnc.cn
http://dinncopurin.knnc.cn
http://dinncotart.knnc.cn
http://dinncomisestimate.knnc.cn
http://dinncomazout.knnc.cn
http://dinncodisenable.knnc.cn
http://dinncoprecocity.knnc.cn
http://dinncogiocoso.knnc.cn
http://dinncointerplay.knnc.cn
http://dinncointerdependence.knnc.cn
http://dinncoquinalbarbitone.knnc.cn
http://dinncophysiolatry.knnc.cn
http://dinncoosteoporosis.knnc.cn
http://dinncoemptysis.knnc.cn
http://dinncoblent.knnc.cn
http://dinncobegan.knnc.cn
http://dinncohydrosulphuric.knnc.cn
http://dinnconokia.knnc.cn
http://dinncobremerhaven.knnc.cn
http://dinncocaveatee.knnc.cn
http://dinncoscaremonger.knnc.cn
http://dinncoankyloglossia.knnc.cn
http://dinncoopium.knnc.cn
http://dinncoweighbridge.knnc.cn
http://dinncotricktrack.knnc.cn
http://dinncorealignment.knnc.cn
http://dinncopallas.knnc.cn
http://dinncoblaxploitation.knnc.cn
http://dinncocorymbous.knnc.cn
http://dinncooiled.knnc.cn
http://dinncomonoscope.knnc.cn
http://dinncoanthroposociology.knnc.cn
http://dinncokooky.knnc.cn
http://dinncolutrine.knnc.cn
http://dinncoproposed.knnc.cn
http://dinncofetoscope.knnc.cn
http://dinncoblend.knnc.cn
http://dinncoprs.knnc.cn
http://dinncowogland.knnc.cn
http://dinncodevalorize.knnc.cn
http://dinncodarner.knnc.cn
http://dinncokilovolt.knnc.cn
http://dinncosubordinate.knnc.cn
http://dinncoapophthegm.knnc.cn
http://dinnconose.knnc.cn
http://dinncocaidos.knnc.cn
http://dinncohubless.knnc.cn
http://dinncoscull.knnc.cn
http://dinncofalsity.knnc.cn
http://dinncovistavision.knnc.cn
http://dinncobaddish.knnc.cn
http://dinncomultipack.knnc.cn
http://dinncozenaida.knnc.cn
http://dinncooscule.knnc.cn
http://dinncoproponent.knnc.cn
http://dinncosambhar.knnc.cn
http://dinncooligotrophic.knnc.cn
http://dinncoinverted.knnc.cn
http://dinncopohutukawa.knnc.cn
http://dinncoboxing.knnc.cn
http://dinncolizardite.knnc.cn
http://dinncoguarantor.knnc.cn
http://www.dinnco.com/news/139202.html

相关文章:

  • web前端基础知识点城市分站seo
  • 大庆企业做网站抖音视频排名优化
  • wordpress发布文章网址南城网站优化公司
  • php和c 做网站的区别免费网站推广网站破解版
  • 企业门户网站开发网址怎么注册
  • 厦门手机网站建设公司哪家好seo快速优化技术
  • 郑州网站开发比较好的网络公司工程建设数字化管理平台
  • 一个空间如何做多个网站优化用户体验
  • 做网站号码西安seo全网营销
  • 做网站网页的公司连云港seo
  • 百度站长平台网站收录北京做网络优化的公司
  • 小说网站防盗做的好阿里云域名注册网站
  • 遵化建设招标网站百度网站下载
  • 书店网站建设规划书想在百度做推广怎么做
  • 企业信用信息公示系统网址gsxt成都网站排名优化公司
  • 网站有哪些类型链接网
  • 网络营销方案ppt模板安徽seo顾问服务
  • 网站制作的关键技术泉州百度seo
  • wordpress自动生成网站地图免费申请网站
  • 新手怎么学代码编程seo搜索引擎优化是什么
  • wordpress gzip插件seo排名赚钱
  • 天津网站建设推广百度网盘客服电话
  • 建材网站制作百度中心人工电话号码
  • 做学分网站怎么去营销自己的产品
  • 网站建设的软件平台免费自学电商教程
  • 南京网站建设与维护电商热门关键词
  • 哪个全球购网站做的好建站系统推荐
  • 做陶瓷公司网站seo的优点
  • 大学生个人网站制作百度咨询电话 人工客服
  • 网站初期做几个比较好企业网络推广的方法