Python MTV(MVC)
M: model 模型层
操作数据库
T: template 模板层
显示数据库
V: view 控制层
接收用户请求,响应请求
MTV步骤
打开pycharm创建一个Django项目
(
根据python版本切换django版本
控制台输入:pip install django==版本号
)
1.先创建一个app
控制台输入:python manage.py startapp 名字
也可以通过Tools中的 Run manage.py Task 打开命令行进行输入
2.在settings里边注册app
将创建的app名写入INSTALLED_APPS=[]
3.在控制层views中写一个视图
#如何写视图
#1.定义视图函数,在视图函数中必须定义一个request对象
# 用来接收客户端请求,且形参第一个必须是request
#2.创建响应对象 HttpResponse 先导入HttpResponse包
#3.返回响应对象
#4.创建完一个视图函数一定要去urls.py中注册
def index(request):
print('index')
msg = 'Hello Django'
response = HttpResponse(f'<h1>{msg}<h1>')
return response
4.在urls.py文件中注册
#浏览器地址栏的url映射到视图函数
#先将app中的views导入
from demo01 import views
urlpatterns = [
url('admin/', admin.site.urls),
url('index/',views.index)#路径名最好和函数名相同
#第一个是浏览器的输入路径,第二个,视图函数名
]
5.启动调试程序
6.返回一个html文件的内容(创建模板)
步骤:
#1.创建一个视图函数 使用render函数 app创建时在views中已经导好了render包
# 在urls.py注册视图函数
# url('temp/',views.temp)
#2.在templates中创建一个和视图函数命名相同的html文件
def temp(request):
pass
return render(request,'templates中创建的html文件名')
7.html使用静态文件(主要是一些css,js,img文件)无数据交互
#1.根目录创建一个static文件夹,下边可以创建类似于h5的资源文件夹(js,css,img)
#2.在settings文件中注册该文件夹(一般写在根目录settings文件最后处)
# 2.1 声明常量 STATICFILES_DIRS (名字别改)
# 值是元组或者列表 元素可以是相对路径也可以是绝对路径(最好是相对路径)部署时可以使用绝对路径
# 如果文件需要移植就写相对路径,一般采用路径拼接
# 2.2 STATICFILES_DIRS =(os.path.join(BASE_DIR,'static'),) 因是元组 后边的逗号不能省
#3.转入第6步的过程
#4.在html文件中使用导入时用/static/需要引入的文件的名称
# <link href='/static/css/common.css' rel ='stylesheet' type ='text/css'>
注意:静态文件的加载是两步完成的,html文件内容通过字符串的格式返回给模板进行渲染,当编译静态文件那一行时,会再次请求服务器加载该静态文件内容,并不是说该文件的内容已经在html文件的内容中了,所以这里会有两次请求
8.html使用动态文件 (有数据的交互,类似于ajax+dom 的操作,结合数据库,使用模板语法)
#1.修改数据库配置,在根目录下的settings.py文件中找到DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #该处的数据库看要求切换。这里使用mysql
'NAME': 'test', #数据库名
'HOST':'127.0.0.1', #数据库ip地址
'PORT':'3306', #数据库端口
'USER':'root', #数据库账户名
'PASSWORD':'root', #数据库密码
'CHARSET':'utf8', #数据库内容编码格式
}
}
#2.在数据库中创建一个库,库名与settings.py中设置的保持一致
#3.在pycharm中安装数据库的驱动 pip install pymysql
# 并在Django中初始化pymysql(根目录的__init__.py文件中)
import pymysql
pymysql.install_as_MySQLdb()
#4.在app文件下的models.py文件中定义模型
# 写一个类继承models.Model并定义属性(对应数据库中的列名)
#
class User(models.Model):
user_id = model.AutoField(primary_key=True)
username = model.CharField(max_length=64)
password = model.CharField(max_length=64)
#5. 在数据库中创建表,打开控制台,输入下边的代码
python manage.py makemigrations app名称 #生成迁移文件
python manage.py migrate app名称
#默认的表名是 app名称_模型函数名(小写)
#修改默认表名方法:
class Meta:
db_table = '表名'
#注意:每次改动或者重命名后都要重新执行上边的两行代码
#放在模型类下边即可
#之后在数据库中往该表中插入若干数据
#6. 先将.models模块中的创建的User类导入 from .models import User
# 接着转入第6步 先创建视图函数 并在urls.py中注册,
# 动态文件重要使用render函数的第三个参数,context 是个字典对象 这就是面向对象操作数据库
def test_db(request):
users = User.objects.all() # == SELECT * FROM user
return render(request,'templates中创建的html文件名',context ={'users':users})
#7. 转入第7步 在根目录下创建static文件,放入需要引用的静态文件资源并在根目录下的settings.py文件中注册
#8.在templates中创建一个和视图函数相同名字的html文件
#9.在html界面中使用用模板语法,动态的给元素赋值
<table>
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
</tr>
{% for user in users %}
<tr>
<td>{{ user.user_id }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
</tr>
{% endfor %}
</table>