web后端开发
1.创建django项目
1.1 cmd命令行执行:django-admin startproject 项目名 命令创建django项目(前提是python环境中已经安装了django的第三方库)
1.2 用Pycharm打开项目文件,创建虚拟环境。
1.3 创建虚拟环境:setting-->project interpreter-->Add-->ok
或者pycharm终端执行:python -m venv venv 创建虚拟环境
1.4 安装依赖库:django2.1.14, pymysql(pip install django==2.1.14)
安装完成后,即可执行命令运行django服务。
1.5 项目文件夹下的init.py文件中加入以下2句代码,使pymysql库可以正常使用:
improt pymysql
pymysql.install_as_MySQLdb()
1.6 在MySQL中创建项目的数据库,数据库名需要和项目名一致,执行的代码如下:
create database 数据库名 default charset utf8;
1.7 在MySQL中创建项目数据库的操作用户,代码如下:
create user '用户名'@'% or ip地址' identified by '密码';
1.8 给新建的用户授予操作权限,命令如下:
grant all privileges on 数据库名.* to '用户名'@'% or ip地址' identified by '密码’;
# privileges前可以不加all,指给指定用户授予部分权限,权限名跟在privilege后面并以逗号给开
#数据库名. 后面可以跟表名,指给指定数据库中指定的表授予权限,后面跟*,表示授予指定数据库中所有表的操作全权限。
1.9 修改项目的配置文件setting.py,内容如下:
DATABASES = { #添加项目依赖的数据库信息,可添加多个
default:{ #如果项目只需要一个数据库,建议就设置为default
'ENGINE': 'django.db.backends.mysql', #数据库引擎
'NAME': 'django1906', #数据库名称
'HOST': '139.224.34.130', #数据库的主机名称
'PORT': 3306, # 数据库端口
'USER': 'jackpowerf', #用户名字
'PASSWORD': '123456', #用户密码
'CHARSET': 'utf-8', #存取数据的编码格式,需和数据库的相一致
'TIME_ZONE': 'Asia/Chongqing',
}
}
LANGUAGE_CODE = 'zh-hans' #将语言改为汉语
TIME_ZONE = 'Asia/Chongqing' #设置时区为东八区,重庆
1.10.在pycharm终端(Terminal)执行命令:python manage.py startapp 应用名 创建应用
# 将应用配置到setting.py文件中
INSTALLED_APPS = [
'v_query',
]
1.11 将项目推到github上
对本地代码实施版本控制并同步到版本控制服务器,在项目目录下打开git bush,执行以下代码:
1.git init --将普通文件夹变成版本仓库
2.git remote add origin <url> -- 绑定远端仓库
3.git add . --将文件从工作区同步到暂存区
4.git commit -m '...' -- 将文件提交到本地仓库
5.git status / git log
6.git push -u origin master -- 将本地代码推到服务器
2.从git上克隆项目
1.用pycharm克隆项目到本地
2.创建虚拟环境(同1),或用python终端执行以下代码创建虚拟环境:
source venv/bin/activate / "ven/Scripts/activate"
3.重建依赖项:pip install -r requirement.txt
4.运行项目服务
3.项目架构模式:MVC
M - Model - 模型 - 需要展示的数据
V - View - 视图 - 数据显示形式
C - Controller - 控制器
架构理念:让模型(数据)和视图(显示)要分离 - 数据和显示解耦合,同一个数据可以渲染成不同的视图,同一个视图可以加载不同的数据。
Django中的项目架构模式:MTV
M - 模板 - 需要显示的数据
T - 视图 - 数据显示的形式 - HTML文件 --需要自己新建
V - 控制器 - 数据显示的方式 - 数据显示的函数
1.配置视图
setting.py --> TEMPLATES --> 'DIRS': [os.path.join(BASE_DIR,'templates'),]
2.view,py - 控制器
1.接收与用户请求,验证用户请求
2.操作模型(加工数据)
3.产生响应(渲染页面)
4.渲染页面
4.1创建视图函数:
# index:视图函数
def index(request:HttpRequest): #request:用户请求信息(包括请求行、请求头、消息体)
# return HttpRequest('<h1>Hello,Django!</h1>') # HttpRequest:响应的内容
return render(request,'index.html', context) #render() 用来渲染网页的函数,request:请求对象,‘index.html':要渲染的网页;context:字典,需要显示的数据
4.2 创建映射
from v_query.views import index
urlpatterns = [
path('admin/', admin.site.urls),
# path:一个函数,将一个路径和视图函数生成映射关系
# 'index/': 在浏览器地址栏添加的路径
# index:浏览器添加的地址映射的视图函数
path('index/', index)
]
4.2 模板页
即HTML文件:
Django模板页,可以使用django模板语言模板指令来生成动态内容
#for循环
{% for 变量 in 序列 %} - 将映射的视图函数传来的数据通过for循环遍历取出,这里的序列需要与传来的字典中的键一致
<标签>{{ 变量 }}</标签> - 将for循环取出的变量依次在网页中显示,循环多少次就显示多少个标签
{% endfor %} - 表示循环结束
5.Django ORM框架
解决对象模型到关系模型的双向转换问题 - 将数据从对象形式与二维表形式的双向转换
6.创建数据模型
在models.py中:
class Subject(models.Model): #modes.Model :django封装的模型类,实现对象与关系的双向转换(类的属性即是二维表中的字段)
""""学科模型类"""
no = models.AutoField(primary_key=True, verbose_name='编号')
name = models.CharField(max_length=20, verbose_name='名称')
intro = models.CharField(max_length=1000, verbose_name='介绍')
is_hot = models.BooleanField(default=False, verbose_name='热门')
def __str__(self):
return self.name
class Meta: # 指定此模型独赢数据库中形成的表的信息
db_table = 'tb_subject' #表名
verbose_name = '学科'
verbose_name_plural = '学科'
7.迁移
将模型迁移到项目的数据库中,并形成二维表。
python manage.py makemigrations v_query #生成迁移
python manage.py migrate # 执行迁移,形成二维表
8.ORM框架实现数据查询
def index(request):
queryset = Subject.objects.all() #获取所有模型的对象
context = {
'subjects': queryset
}
return render(request, 'subject.html', context)
9.创建django自带管理后台的管理员账号
python manage.py createsuperuser
10.注册模型到django管理后台
admin.py 文件中添加:
admin.site.register(Subject, SubjectAdmin) #Subject 自己创建的模型
11.配置和加载静态资源
11.1 项目目录下创建static文件夹,存放静态资源文件
11.2 将静态文件配置到setting.py中
#配置静态资源的访问路径
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
12.模型关联关系
在模型类的外键中加入2个参数t:o=关联的模型,on_delete=modes.PROTECT.
subject = models.ForeignKey(to=Subject, db_column='sno', on_delete=models.PROTECT, verbose_name='所属学科')
13.关联模型和静态资源
13.1 给模型添加属性以保存静态资源路径,迁移后,在数据库中不上对应静态资源的路径
13.2 用模板语言加载静态资源:
{% load staticfiles %} - 添加到html文件的最前面
例:
<img src="{% static 模板对象.静态资源属性 %}">
14. 将密码生成MD5摘要
def to_md5_hex(str):
""" 生成MD5摘要"""
return hashlib.md5(str.encode())
15. 保存登录用户的下相关信息
我们可以将登录用户的信息保存在Django框架提供的session对象中。
request.session['username' = user.username]