【框架结构及作用】
【开展项目】
生成一个app模块
#PyCharm命令行
PS D:项目路径> python ./manage.py startapp 模块名称(比如app01)
在运行、编写app部分之前 要将app部分注册进配置文件中 确保app已注册
编写URL和试图函数对应关系
编写视图函数
也可以用render返回html文件格式
- 启动项目:
# PyCharm命令行
PS 项目路径> python .\manage.py runserver
或者用PyCharm的绿色启动箭头开启
输入对应URL 得到返回的视图
- templates模块:
存放用于返回的HTML模板
- 静态文件:
在开发过程中 一般将图片、CSS、JS都处理成静态文件 必须存放在APP下的static文件夹下
以上方法不推荐使用
可以使用django的方法 这样以后在修改静态文件位置时 只需要修改配置文件中的STATIC_URL
- 在html中使用传入变量:
在views方法中以字典的格式传入变量
在html文件中用{{key}}的形式来使用
- 关于列表类型的变量使用:
同上述一样传入参数
可以使用{{ name.id }}的方式获取相应下标的值 也可以用循环遍历的方式
- 关于字典类型的变量使用:
可以使用{{ name.key }}的方式获取相应键的值 也可以使用循环方式 循环方式有:
{% for k,v in name.items %} //获取键和值
{% for item in name.keys %} //只获取键
{% for item in name.values %} //只获取值
- 请求与响应:
- Django安全机制 Forbidden错误:
需要在form表单里面加入 {% csrf_token %}
相当于Django提供的校验令牌
- HTML模板的继承
编写一个HTML模板 写入{% block content %}{% endblock %}占位符
只需要在其他HTML中写入block内部的内容即可
- Django的连表操作:
- 在后台get传参时加入特定值
首先将原get深拷贝一份 再将_mutable设置为True 即可在深拷贝中写入参数
- 关闭项目服务:
在PyCharm命令行下 按住Ctrl+C
或者找到项目服务的进程id
输入kill 对应id
【Django组件 -- Form与ModelForm】
Form与ModelForm都是Django给提供的方便前端表单提交的组件
===========[Form]===========
首先要在views.py中定义form属性
# views.py
from django import forms
class MyForm(forms.Form):
name=forms.CharField(widget=Input)
age=forms.IntField(widget=Input)
xxx=forms.方法名(属性名1=值1,属性名2=值2...)
在对应方法中将MyForm类实例化后的变量传入前端
# views.py
def func_name(request):
form=MyForm()
return render(request,'xxx.html',{'form':form})
在全端页面的表单中只需要引入属性名Django就会自动的生成相应的HTML代码 (注1)
<!-- 前端HTML -->
<form method='post' action='xxx'>
{{form.name}}
{{form.age}}
</from>
或者在前端中循环form Django也会自动生成相应HTML代码 (注2)
<!-- 前端HTML -->
<form method='post' action='xxx'>
{% for field in form %}
{{ field }}
{% endfor %}
</form>
注1 与 注2的效果相同
========[ModelForm]========
ModelForm同样需要在views.py中声明
# views.py
from django import forms
from APP模块名 import models
class MyModelForm(forms.ModelForm):
xx=form.CharField(...) # ModelForm同样可以自定义字段
class Meta:
model= models.py中已经定义的类名
fields=['属性名1','属性名2'...] # 需要在前端输入的类的属性名
【Django数据库操作 ORM】
Django内部提供了orm框架 方便我们对数据库中的表以及其中的数据进行操作
- 安装第三方模块
pip install mysqlclient
- 手动创建数据库
orm框架只能对数据库中的表进行操作 而无法对数据库进行操作 所以就需要手动创建数据库
CREATE DATABASE `数据库名称` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
======== Django操作数据库中的表========
在settings.py文件中进行配置和修改
- 创建表
在models.py文件中写入相关的类:
from django.db import models
# Create your models here.
class UserInfo(models.Model): # 规定类必须继承models
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
"""
当Django读入这个类时 会自动将该类翻译为创建一个表的SQL语句:
create table app01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
)
"""
在类写入完毕后 在终端执行 (app必须提前注册 否则不会提交)
PS 项目路径>python manage.py makemigrations
PS 项目路径>python manage.py migrate
设置外键
数据约束
- 操作表或数据
在表中新增字段时,由于已存在列中可能已有数据,所以新增列必须指定新增列对应的数据:
1.手动输入一个值
2.设置默认值
字段名称 = models.字段类型方法(default=默认值)
3.允许为空
字段名称 = models.字段类型方法(null=True,blank=True)
新增数据:
类名.objects.create(字段1=值,字段2=值, ... ...)
删除数据:
根据filter()筛选出来的数据删除:
类名.objects.筛选方法名(参数).delete()
比如 UserInfo.objects.filter(id=3).delete()
删除全部数据:
类名.objects.all().delete()
获取数据:
类名.objects.筛选方法名(参数)
比如 UserInfo.objects.all() UserInfo.objects.filter(id=1)
数据的返回类型为 data_list=[对象1,对象2, ... ...]
若只想取一条数据 则可以:类名.objects.筛选方法名(参数).first()
比如 UserInfo.objects.filter(name='aaa').first()
或者可以在筛选后加上 [start:end]来控制得到的区间:
数据的返回类型为一个封装好的对象 不再需要遍历
筛选常用条件:
当条件较多时 可以将条件写成字典形式的变量 然后用filter(**data) 来筛选
也可以使用order_by(key)的方式来进行根据key的排序
修改数据:
类名.objects.筛选方法名(参数).update(字段名=值)
比如 UserInfo.objects.filter(name='aaa').update(name='aaa01')
- 删除表或字段
将相关的类或字段注释掉后 再次执行命令即可
PS 项目路径>python manage.py makemigrations
PS 项目路径>python manage.py migrate