pythonWeb前期基础
# python web
## 前端开发
目的:开发一个网站:
- 前端开发:html、css、js
- web框架:接收请求并处理
- mysql数据库:存储数据的地方
快速上手:
- 基于Flask web框架快速搭建网站
深入学习:
- 基于Django框架(主要)
## 1、快速开发完网站
```
安装flask:pip install flask
安装超时换pip源
你下载的库可以很多都是在国外,所以你下载很慢,往往导致超时错误,对此,你可以对你的pip换源,换成国内的镜像源来解决这个问题,下面列出几种常见的国内源。
国外镜像源:
加利福尼亚大学 :https://www.lfd.uci.edu/~gohlke/pythonlibs/
国内镜像源:
豆瓣:http://pypi.douban.com/simple (推荐)
阿里:http://mirrors.aliyun.com/pypi/simple
清华:https://pypi.tuna.tsinghua.edu.cn/simple(推荐)
华中理工大学:http://pypi.hustunique.com/simple
山东理工大学:http://pypi.sdutlinux.org/simple
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple
使用方法:
使用一次: pip install you_package_name -i https://pypi.tuna.tsinghua.edu.cn/simple(清华源)
设置镜像源 :pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple(清华源)
```
## 初识Django
python知识点:函数、面向对象
前端开发:html、css、js、jQ、bootstrap。
mysql数据库
python的web框架:
1. flask
2. Django(主要)
## 安装Django
```
pip install django
通过命令查看安装的工具包:pip list
```
```
c:python
-python.exe
-scrpits
-pip.exe
-django-admin.exe
-lib
-内置模块
-site-packages
-openpyxl
-python-docx
-flask
-django
```
## 创建项目
默认项目的文件介绍
```
djangoProject 项目名称
|--manange.py [项目的管理、启动项目、创建app、数据管理]
|--djangoProject
|--_init_.py [一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包]
|--asgi.py [接收网络请求:异步](不要动)
|--settings.py [项目的配置文件]
|--urls.py [url和函数的对应关系]
|--wsgi.py [接收网络请求:同步](不要动)
```
## 创建APP
```
-项目
-用户
-订单
-后台
-主页
...
注意:一般用不到很多APP,我们开发只使用一个就好!!
```
```
创建项目:django-admin startproject project
创建APP:python manage.py startapp app(app的名称)

```
## 快速上手
### 注册app
通过app找到app.py中的AppConfig
在setting.py中找到INSTALLED_APPS,注册app。

在urls.py中编写url和视图函数的对应关系
url对应的是我们app中的view.py中的函数

在view.py中编写视图函数
- 返回数据和网页俩种方式


启动操作Django项目
1. 命令行启动
```
python manage.py runserver
```
2. 手动启动

## templates模板
所有的html都在templates文件中
但是,如果我们有css,js,图片文件该放哪呢?
我们需要创建static文件在app中,并且在static中创建css,js,img,plugins(插件)
### 静态文件引入方式(官方推荐方法)
需要引用的href和src都通过这种方法使用
```
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'css/index.css'%}">
</head>
<body>
<p>登录</p>
</body>
</html>
```
好处:代码上线之后方便管理,如果static路径改了,我们可以通过修改一个配置文件中的STATIC_URL去统一路径
css,js静态文件访问不到解决方法:
在settings.py中设置静态文件夹
```
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static/'),
)
```
## django模板语法
```
def index (request):
name = "小粤"
roles = ["老师", "学生", "校长"]
user_info = {"name": "张三", 'role': "老师"}
data_list = [
{"name": "张三", 'role': "老师"},
{"name": "王五", 'role': "学生"},
{"name": "老六", 'role': "校长"}
]
return render(request, "index.html",
{"name": name, "roles": roles, "info": user_info, "data": data_list})
```
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>字符串:</p>
<p>{{ name }}</p>
<p>列表:</p>
<p>遍历列表:</p>
{% for role in roles %}
<li>{{ role }}</li>
{% endfor %}
{{ roles.0 }}
{{ roles.1 }}
{{ roles.2 }}
<p>字典:</p>
<p>分别写出名字的值和角色的值:</p>
<span>{{ info.name }}</span>
<span>{{ info.role }}</span>
<p>遍历所有:</p>
{% for info in info.items %}
<p>{{ info }}</p>
{% endfor %}
<p>遍历values:</p>
{% for info in info.values %}
<p>{{ info }}</p>
{% endfor %}
<p>遍历keys:</p>
{% for info in info.keys %}
<p>{{ info }}</p>
{% endfor %}
<p>遍历所有key和value:</p>
{% for k,v in info.items %}
<p>{{ k }} = {{ v }}</p>
{% endfor %}
<p>列表套字典</p>
{% for data in data %}
{{ data.name }}, {{ data.role }}
{% endfor %}
{% if name == "小粤" %}
<p>我是小粤</p>
{% endif %}
</body>
</html>
```
## 请求和响应
```
# 1.获取请求的方式
print(request.method)
# 2.在url上传值 /index/?name = 123&role=老师
print(request.GET)
# 3.在请求体重提交数据
print(request.POST)
# 4.响应:将内容中的字符串返回给请求者
return HttpResponse("返回的内容")
# 5.响应:读取html+渲染+字符串,返回给用户
return render(request, "index.html",
{"name": name, "roles": roles, "info": user_info, "data": data_list})
# 6.响应:让浏览器重定向到其他的页面
return redirect("https://www.baidu.com")
```
## python操作mysql
用python代码连接mysql并且发送指令
```
pip install pymysql
```
数据库连接
```
import pymysql
#1.链接数据库
conn = pymysql.connect(
host='127.0.0.1', # 连接名称,默认127.0.0.1
user='root', # 用户名
passwd='root', # 密码
port=3307, # 端口,默认为3306
db='shopping', # 数据库名称
charset='utf8', # 字符编码
)
#2.获取游标
cursor = conn.cursor()
#3.定义sql
sql = "insert into users(user_name,pwd)values ('abc','123')"
#4.执行SQL语句
cursor.execute(sql)
#5.关闭光标对象
cursor.close()
#6.提交事务(很重要)
conn.commit()
#7.关闭数据库连接
conn.close()
```
注意:
在进行增、删、改的时候,一定要记得commit,去提交事务,否则数据库就会没有数据。
```
cursor.execute(“”)
conn.commit()
```
查询数据的时候不需要commit,但是要执行fetchall/fetchone,查询所有或者是查询复核条件的第一条数据。
```
ce=cursor.execute()
#查询所有数据,无数据的时候是空列表
cf=cursor.fetchall()
#查询符合条件的第一条数据,无数据的时候是none
cf=cursor.fetchone()
```
对于sql语句不要用python的字符串格式化进行拼接,目的是防止sql注入,一定要使用execute+参数
```
cursor.execute(“”,[])
cursor.execute(“”,{ : , :})
```
## Django连接mysql
安装第三方模块
```
pip install mysqlclient
```
报错解决方案:
https://pypi.org/project/mysqlclient/#files

选择对应的python版本安装
### orm
orm可以帮我们做俩件事:
1. 创建、修改、删除数据库中的表(不用你写sql)。【注意:无法创建数据库,需要自己手动创建数据库】
2. 操作表中的数据(不用你写sql)。
### 创建数据库
- 启动mysql服务器
- 创建数据库
### django连接数据库
找到settings.py配置文件,将以下代码注释
```
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
```
替换成mysql数据库
```
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3307, # 数据库端口,默认是3306
'USER': 'root', # 数据库用户名
'PASSWORD': 'root', # 数据库用户密码
'NAME': 'shopping' # 数据库名字
}
}
```
### 操作表
- 创建表
在models.py文件中:
```
class users1(models.Model):
user_name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
```
在命令行中执行:
```
python manage.py makemigrations
python manage.py migrate
```
默认会给表创建id
注意:执行这两行命令的时候一定要注册app,否则数据库中不会有数据
- 删除表
只需要把我们写的删除即可
```
class users1(models.Model):
user_name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
```
- 修改表
删除字段只需要讲对应字段的代码删除,并执行命令
添加字段的时候需要表明要添加字段的默认值,或者执行命令后去添加值
1. 手动输入值(执行命令后输入1,在输入对应的值)
2. 设置默认值
3. 允许为空
```
class users1(models.Model):
user_name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
#设置默认值
age= models.IntegerField(default=0)
#允许为空
data=models.IntegerField(null=Ture ,blank=True)
```
### 增删改查
导入models.py中创建的表
```
from app.models import study
```
### 增
表名.objects.create(...)
```
study.objects.create(user_name="123",pwd="123")
```
### 删
删除这张表单条数据:表名.objects.filter(条件).delete()
删除这张表所有数据:表名.objects.all().delete()
### 改
修改所有数据:表名.objects.all().update(条件)
修改符合条件的数据:表名.objects.filter(条件).update(条件)
### 查
查询所有数据(<对象,对象,...>):表名.objects.all()
查询符合条件的数据(<对象>):表名.objects.filter(条件)
查询符合条件的第一个对象:表名.objects.filter(条件).first()
## 模板继承
#### 模板
```
{% block css%}{% endblock%}
{% block content%}{% endblock%}
{% block js%}{% endblock%}
```
```
{% extends 'xx.html'%}
{% block css%}
......
{% endblock%}
{% block content%}
......
{% endblock%}
{% block js%}
......
{% endblock%}
```
### 应用模板
## 项目
## eachars(画图)
eachars官网:https://echarts.apache.org/zh/index.html
使用手册中下载eachars的js文件:
下载->方法三->在线定制->可自由选择所需图表和组件进行打包下载
注:开发环境建议不压缩代码,代码压缩会去掉大部分常见的警告和错误提示

浙公网安备 33010602011771号