pip3 install django==3.2 -i http://mirrors.ai
C:\Python3 - python.exe - Scripts - pip.exe # 基于pip可以安装第三方组件 - django-admin.exe # 安装django生成的,【工具,创建django项目】 - Lib - 内置模块 - sit-packages # 防止第三方安装的模块 - openpyxl - flask - Django # 【框架源码】
django-admin startproject 项目名称
特殊说明
os.path.join
添加了这个模版的位置├── django_从入门实战 【与项目同名】│ ├── __init__.py│ ├── settings.py 【配置文件】 【===常操作===】│ ├── urls.py 【URL和python函数的对应关系】 【===常操作===】│ ├── asgi.py 【接收网路请求,不需要修改】 django3 异步│ └── wsgi.py 【接收网络请求,不需要修改】 同步式的 └── manage.py 【项目的管理,启动项目,创建app,数据管理,不需要修改】 【===常操作===】
- 项目 - app,用户管理【表结构,函数,HTML模块,CSS】 - app,订单管理【表结构,函数,HTML模块,CSS】 - app,后台管理【表结构,函数,HTML模块,CSS】 - app,网站 【表结构,函数,HTML模块,CSS】 - app,API 【表结构,函数,HTML模块,CSS】
创建APP
cd <项目地址>python manage.py startapp app01
生成后的目录结构
├── app01│ ├── __init__.py│ ├── admin.py 【固定,不用动】 django默认提供了admin后台管理│ ├── apps.py 【固定,不用动】 app启动类│ ├── migrations 【固定,不用动】 数据库变更记录│ │ └── __init__.py│ ├── models.py 【重要】,对数据库进行操作的│ ├── tests.py 【固定,不用动】 单元测试│ └── views.py 【重要】,视图函数├── django_从入门实战│ ├── __init__.py│ ├── __pycache__│ │ ├── __init__.cpython-39.pyc│ │ └── settings.cpython-39.pyc│ ├── asgi.py│ ├── settings.py│ ├── urls.py 【 URL --> 函数 】│ └── wsgi.py└── manage.py
INSTALLED_APPS=[ 'app01.apps.App01Config']
python manage.py runserver
返回字符串:reutrn HttpResponse("欢迎页面")
返回一个模版或者html页面,需要使用render
.python # 1. 在settings设置了DIRS参数,优先去项目根目录的templates寻找 # 2. 根据app的注册顺序,在每个app下的templates目录找 # 3. 如果settings没有设置DIRS,默认在当前目录下的templates寻找 return render(request, "user_list.html")
一般将css,js,image,或者插件都会当作静态文件处理。静态文件放置的位置:app目录下的static
目录里面目录结构:
```text├── app01│ ├── static│ │ ├── css│ │ ├── img│ │ ├── js│ │ └── plugins```
静态文件的引用的写法
```html{% load static %} <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>This is a user_list</title> <link rel="stylesheet" href="{% static 'plugins/...../....css' %}"></head><body><h1>这是用户列表</h1><script src="{% static 'js/xxx.js' %}"></script><script src="{% static 'css/xxx.css' %}"></script></body></html>```
本质上:在HTML中写一些占位符,有数据对这些占位符进行替换和处理模块的用法:
{{ n1 }}
. 引用函数里面的变量{{ n2.0 }}
. 引用函数里面的列表的索引{{ n3.key }}
. 引用函数里面的字典的key{#列表循环#}<div>{% for item in n2 %} <span>{{ item }}</span>{% endfor %}</div>{#字典循环#}<ur> {% for item in n3.values %} <li>{{ item }}</li> {% endfor %}</ur><ur> {% for item in n3.keys %} <li>{{ item }}</li> {% endfor %}</ur><ur> {% for key,value in n3.items %} <li>{{ key }}:{{ value }}</li> {% endfor %}</ur>{#列表里面套字典循环#}{{ n4.1 }}{{ n4.1.name }}{{ n4.1.role }}{% for item in n4 %} <div>{{ item.name }}:{{ item.age }}:{{ item.role }}</div>{% endfor %}
{% if n1 == "zhang" %} <div>yes</div>{% else %} <div>no</div>{% endif %}
# 1.获取请求方式 GET/POST/PUSH/DELETEprint(request.method)# 2. 在URL上传递一些值print(request.GET)# 3. 通过请求体提交数据print(request.POST)# 4. 【响应】HttpResponse("返回内容") 将字符串内容返回给请求体# return HttpResponse("返回内容")# 5.【响应】使用render,读取HTML内容 + 渲染 --> 字符串 返回给用户数据# return render(request, 'something.html', {"title": "来了"})# 6.【响应】 redirect()返回:让浏览器重定向到其他页面return redirect("https://www.baidu.com")
关于重定向。用户发送请求到网站,网站返回一个网址给浏览器,浏览器在去访问获得的地址进行访问
在Django进行表单的时候存在下面的报错
<form method="post" action="/login/"> {% csrf_token %} <input type="text" name="user" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <input type="submit" value="提交"/></form>
pip3 install mysqlclient
ORM 可以帮助我们做的两件事
步骤:
create database django_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
在settings.py文件中进行配置和修改
# settings.pyDATABASES = { 'default':{ 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_day15', # 数据库名字 'USER': 'root', 'PASSWORD': 'wlh10261003', 'HOST': '119.29.100.160', 'PORT': '3306' }}
在models.py里面创建ORM模型
create table app01_usermodel( id bigint auto_increment primary key, name varchar(32), password varchar(64), age int)
执行命令
python3 manager.py makemigrationspython3 manager.py migrate
注意:app需要提前注册
在表中新增列时,由于表中已经存在数据,所以在新增列必须要指定新增列对应的数据
age = models.IntegerField(default=0)
age = models.IntegerField(null=True,blank=True)
在开发中对表结构进行调整,只需要在models中操作类即可,然后执行下面的命令
python3 manager.py makemigrationspython3 manager.py migrate
新建 添加数据
from app.models import DepartModel,UserModelDepartModel.objects.create(title="运维部")DepartModel.objects.create(title="运营部")DepartModel.objects.create(title="研发部")DepartModel.objects.create(title="人力资源部")UserModel.objects.create(name="张三",password="123456",age=26)UserModel.objects.create(name="李四",password="123456",age=37)UserModel.objects.create(name="王五",password="123456")
删除 数据
from app.models import DepartModel,UserModelUserModel.objects.filter(id=1).delete()UserModel.objects.all().delete()DepartModel.objects.all().delete()
筛选/获取 数据
from app.models import UserModel# 得到的是一个QuerySet类型,就是[对象,行,行]data_list = UserModel.objects.all() # 获取所有for obj in data_list: print(obj.name,obj.password,obj.age)# 通过下面的方式也是获取的一个QuerySet的类型数据 [对象,]data_list = UserModel.objects.filter(id=5)print(data_list)# 可以通过下面的方式,直接获取一个查询到的对象data_object = UserModel.objects.filter(id=5).first()print(data_object)print(data_object.name, data_object.password, data_object.age)
from app.models import UserModelUserModel.objects.all().update(password="999")UserModel.objects.filter(id=4).update(age=54)
具体代码实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>用户管理</title></head><body><h1>INFO 列表</h1><a href="/info/add">添加用户</a><table border="1"> <thread> {# tr:表示行#} <tr> <th>ID</th> <th>用户</th> <th>密码</th> <th>年龄</th> </tr> </thread> <tbody> {% for obj in data_list %} <tr> <td>{{ obj.id }}</td> <td>{{ obj.name }}</td> <td>{{ obj.password }}</td> <td>{{ obj.age }}</td> </tr> {% endfor %} </tbody></table></body></html>
views.info_list
urls.py
本文来自博客园,作者:Lin-Grocery,转载请注明原文链接:https://www.cnblogs.com/moniter/articles/chu-shi-django.html