项目文件功能
终端操作:
pip freeze 查看该项目部署的包
pip install django 安装django
python manage.py runserver
package_name
__init__.py #
asgi.py # 和wsgi.py一起,接收网络请求的,不用修改,Django接收异步的
settings.py # 项目的配置文件,eg:数据库连接信息、注册app等,常操作
urls.py # 全部的URL和函数的对应关系,常操作
wsgi.py # 和asgi.py一起,接收网络请求的,不用修改,Django接收同步的
manage.py # 项目管理的脚本,不要修改,eg:启动、创建app、数据库管理等
在确保项目下有django的前提下使用python manage.py startapp index可以为项目添加需要的app
index
migrations # 数据库变更记录,会自动生成文件
__init__.py #
admin.py # 固定的不用动,django默认提供的后台管理,但实际开发不常用
apps.py # 固定的不用动,app启动相关
models.py # 对数据库进行操作,这里不用SQL写了,Django封装了ORM供调用
tests.py # 固定的不用动,用来单元功能测试的,个人小项目可以不用管
views.py # 撰写视图函数(得我们自己写的)
快速上手
① 修改settings.py
在INSTALLED_APPS中,添加一个’ ',准备添加新app的内容
‘ ’ 中的内容时调用新app里面的类的内容,如:index.apps.IndexConfig
② 修改urls.py 修改映射
path('index/', views.index)
这句的映射关系即为访问http://www.xxxx.com/index
时,触发的函数是名为index的app下的views.py
中的index函数
③ 相应app下的views.py
④ 运行django项目
命令行运行:python manage.py runserver
完成之后访问localhost:8000/index/
创建新的页面
首先views.py中撰写相应函数
其次urls.py中定义URL和函数的对应关系
# 举例
# views.py中添加
def user_add(request):
return HttpResponse("用户增加")
def user_delete(request):
return HttpResponse("用户删除")
# urls.py中添加
path('user_add/', views.user_add),
path('user_delete', views.user_delete)
templates
首先在index
下创建templates文件夹,并在templates下创建html文件
templates为固定放html文件
static
index包下创建static文件夹
static为固定放图片、css、js
static下创建css、js、img文件夹
# python新格式
{% load static %} # html文件开头
.
.
.
<img src="{% static 'img/1.png' %}"> #正常img的位置用这个
render() 传网页
其次设置函数与url对应关系
# url.py中
path('my/html', views.my_html),
# views.py中
def my_html(request):
return render(request, "my_html.html")
django模板语法
前端调后端
tender()的第三个参数,可以给views.py传递数据,必须是字典
# views.py
def look(request):
a_name = "whx"
b_list = ["666", 12, "牛"]
return render(request, "learn.html", {"a" : a_name, "b" : b_list})
# urls.py
path('look', views.look),
# learn.html
<body>
<div>{{ a }}</div>
<div>{{ b }}</div>
</body>
索引
django中通过 . 调用
<body>
<div>{{ a }}</div>
<div>{{ b }}</div>
# 索引
<div>{{ b.0 }}</div> # pyhton中为 b[0]
<div>{{ b.1 }}</div> # pyhton中为 b[1]
<div>{{ b.2 }}</div> # pyhton中为 b[2]
</body>
for
一个for对应一个endfor
{% for a in b %}
<div>{{ a }}</div>
{% endfor %}
if
一个if对应一个endif
{% if b == "666" %}
<div>{{ b }}</div>
{% else %}
<span>{{ b }}</span>
{% endif %}
上述把list换成dict
b.keys
b.values
b.items
request&response
request
# request
def login(request):
print(request.method) # 控制台打印前端访问方法 GET/POST
print(request.GET) # 控制台打印URL传的参数
print(request.POST) # 控制台打印
return render(request, "login.html")
response
views.py中函数所返回的
from django.shortcuts import render, HttpResponse, redirect
def login(request):
name = "whx"
return render(request, "login.html", {"a" : name}) # render() 前端调后端
# return Httpresponse("666") # 返回内容
# return redirect("https://www.baidu.com/") # 重定向
{% csrf_token %}
安全机制
ORM(数据库操作)
安装mysqlclient
pip install mysqlclient
ORM会帮我们
增删改查数据库中的表(不用写SQL语句)【但数据库你得自己建】
操作表中数据,即增删改查表中记录(不用写SQL语句)
创建数据库
django连接数据库
settings.py文件中配置连接参数
'default': {
'ENGINE': 'django.db.backends.mysql', # Django的引擎,还可以用Oracle等
'NAME': 'name', # 数据库名
'USER': 'root', # 用户名
'PASSWORD': 'xxxxxx', # 密码
'HOST': 'localhost', # 数据库服务器地址
'PORT': 3306, # 端口号(MySQL默认3306)
}
django操作表
增
model.py写一个类就是创建一个表
# 在MySQL中创建对应的一个表
class UserInfo(models.Model):
# 创建字段
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
ORM会帮我们把这段代码转化成SQL语句
create table index_userinfo( # 表明为app名_类名
id bigint auto_increment primary key, 【django创建表自带自增字段】
name varchar(32),
password varchar(64),
age int,
);
删
把model.py中的类注释掉,运行,即可删除
改
1.增加字段
①直接在类中添加字段
sex = models.CharField(max_length=2)
直接运行,会有两个选项,让你添加默认值
②如果不想添加默认值,可以设为null
nickname = models.CharField(max_length = 32, null = True)
2.修改字段
直接将字段名称改为想修改的即可,运行
3.删除字段
直接注释
4.表内增删改查
都需要写在views.py中
①增
类名.objects.create("") # 类名为前面model.py中的类名
# 例
TeacherInfo.objects.create(name = "www")
②删
类名.objects.filter().delete():# 筛选内容,再删除
类名.objects.all().delete():# 删除表内全部内容
# 例
TeacherInfo.filter(id = 1).delete()
③改
类型.objects().all().update():修改全部
类型.objects().filter().update():筛选内容,再修改
# 例
TeacherInfo.objects.filter(id = 1)(name = "hhh")
④查
类名.objects.all():查询表中所有数据
类名.objects.filter():筛查相应的数据
# 例
data = TeacherInfo.objects.all()
for d in data:
print(p.id, p.name)
运行
python manage.py makemigrations
python manage.py migrate
常见参数位
常见参数
max_length # CharField()用
verbose_name # 注释
primary_key # 主键
default # 默认值
max_digits # DecimalField()用
decimal_places # DecimalField()用,显示小数点后几位
null&blank # 组合使用,null=True blank=True
choices # 元组,约束
外键
名字 = models.ForeignKey(to="类名", to_field="id")
# 一个a对应对个b,外键设置在b类中,to="a的类名"
级联删除
on_delete=models.CASCADE