Django学习笔记
- 初识Django
- 安装Django
- 创建Django项目
- APP
- 启动Django
- 快速上手
- 再写一个页面
- templates模板
- 静态文件
- 模板语法
- 请求和相应
- 登录案例
- 数据库操作
- 安装第三方模块
- ORM
- Django官网 : https://docs.djangoproject.com/en/4.2/
- Django中文文档参考网站:https://yiyibooks.cn/
初识Django
安装Django
pip install django
创建Django项目
Django中项目会有一些默认的文件和文件夹
-
在终端
-
打开终端
-
进入到某个目录(项目放在哪里)
-
执行命令创建项目
"D:\py3.10.11\Scripts\django-admin.exe" startproject 项目名称
如果
D:\py3.10.11\Scripts\django-admin.exe
已加入系统环境变量。django-admin.exe startproject 项目名称
-
最后目录里面就多出来创建的几个项目
-
-
pycharm中创建Django项目
特殊说明:
由于用pycharm创建的Django项目会多出一个templates文件夹,若用不到可以将其删除,同时删除settings.py文件中的DIRS内容,此为默认templates目录存放路径
默认文件介绍:
mysite2
|--manage.py [项目的管理、启动项目、创建app、数据管理] [不要动]
|--mysite2|--__init__.py|--settings.py [项目配置文件] [常常修改]|--urls.py [URL和函数的对应关系] [常常修改]|--asgi.py [接收网络请求] [不要动]|--wsgi.py [接收网络请求] [不要动]
APP
在Django中,"app"是指一个可重用的组件,用于实现应用程序中的特定功能。Django的项目通常由多个应用组成,每个应用负责处理不同的功能模块,例如用户认证、博客功能、论坛等。应用的使用可以使得项目更加模块化、可维护性更高,方便团队协作和代码重用。
下面是关于Django中的app的一些重要信息:
-
创建app: 使用以下命令在Django项目中创建一个新的app:
python manage.py startapp app_name
这将在项目根目录下创建一个新的文件夹,其中包含了app的相关文件结构。
除此之外,还可以在pycharm中点击Tools工具中的Run manage.py Task
选项,让我们在输入的时候python manage.py可以不写,只写python manage.py后面的命令
-
app目录结构: 一个Django app的典型目录结构如下:
markdownCopy codeapp_name/ ├── migrations/ ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── views.py └── ...
migrations/
: 存放与数据库迁移相关的文件,用于管理数据模型的变更。__init__.py
: 将app目录变为Python包。admin.py
: 注册数据模型,以便在Django管理后台进行管理。apps.py
: app的配置文件,固定的,不用动。models.py
: 定义数据模型。tests.py
: 编写测试用例。views.py
: 定义处理HTTP请求的视图函数。
-
app的配置: 在项目的
settings.py
中,需要将app添加到INSTALLED_APPS
列表中,以便Django知道哪些app被包含在项目中。 -
URL配置: 每个app可以拥有自己的URL配置,通过在app目录下创建
urls.py
文件,并在项目的主URL配置中包含它。这样,每个app都可以处理自己的URL路由。 -
视图函数: 在app的
views.py
文件中,定义处理HTTP请求的视图函数。这些视图函数接收请求并返回HTTP响应,可以通过模板引擎渲染页面或返回JSON数据等。 -
数据模型: 在app的
models.py
文件中定义数据模型,这些模型描述了数据在数据库中的结构。Django会自动根据这些模型生成相应的数据库表,并提供了ORM(对象关系映射)来简化对数据库的操作。 -
后台管理: 在app的
admin.py
文件中,可以将定义的数据模型注册到Django的管理后台,方便进行管理和编辑数据。
总之,Django中的app是一种组织代码的方式,它允许你将应用程序划分为小的、可重用的部分,有助于更好地组织代码、提高可维护性,并使开发过程
启动Django
-
确保app已注册
找到apps.py,找到name参数
最后在setting.py中的INSTALLED_APPS中最后一行添加一行信息
-
编写url和视图函数的对应关系(urls.py)
-
编写视图函数
-
启动Django项目
-
命令行启动
python manage.py runserver
-
pycharm启动
启动之后便可访问http://127.0.0.1:8000/index/
-
快速上手
再写一个页面
比如说要继续写页面可以先编辑view.py视图函数
from django.shortcuts import render, HttpResponse# Create your views here.
def index(request):return HttpResponse("hello world")def user_list(request):return HttpResponse("用户列表")def user_add(request):return HttpResponse("添加用户")
然后在urls.py里面来指定访问路由
from django.contrib import admin
from django.urls import pathfrom app_test import views
urlpatterns = [# path('admin/', admin.site.urls),# www.xxx.com/index/ -> 函数path('index/', views.index),path('user/list/', views.user_list),path('user/add/', views.user_add),
]
然后运行就得到如下效果
templates模板
示例:
编辑views.py
def user_list(request):# 1.优先去根目录的templates中寻找(提前先配置)【不配置无效】# 2.去app目录下的templates目录寻找user_list.html(根据app的注册顺序,逐一去他们的templates目录中找)return render(request, "user_list.html")
在templates文件夹中创建一个user_list.html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>用户列表</h1>
</body>
</html>
然后运行即可访问http://127.0.0.1:8000/user/add/页面
静态文件
在开发过程中一般将:图片、CSS、JS 都会当静态文件处理
在app目录下创建static文件夹。
引用静态文件
模板语法
本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理
模板语法示例如下:
urlpatterns = [path('tpl/', views.tpl),
]
def tpl(request):name = "jhon"roles = ["管理员", "CEO", "保安"]user_info = {"name":"lily", "salary":10000, 'role':'CEO'}data_list = [{"name": "lily", "salary": 10000, 'role': 'CEO'},{"name": "Joe", "salary": 10000, 'role': 'CEO'},{"name": "Lihua", "salary": 10000, 'role': 'CEO'},]return render(request, "tpl.html", {"n1": name, "n2": roles, "n3":user_info, "n4":data_list})
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>模板语法的学习</h1><div>{{ n1 }}</div><div>{{ n2 }}</div><div>{{ n2.0 }}</div><div>{{ n2.1 }}</div><div>{{ n2.2 }}</div><div>{% for item in n2 %}<span>{{ item }}</span>{% endfor %}</div>
<hr>{{ n3 }}{{ n3.name }}{{ n3.salary }}{{ n3.role }}
<ul>{% for k, v in n3.items %}<li>{{ k }} = {{ v }}</li>{% endfor %}</ul>
<hr>
{{ n4.1 }}<br>
{{ n4.1.name }}<hr>
{% if n1 == "test" %}<h1>哒哒哒哒哒</h1>
{% else %}<h1>哈哈哈哈哈</h1>
{% endif %}
</body>
</html>
运行结果如下:
请求和相应
登录案例
数据库操作
-
MySQL数据库 + pymysql
import pymysql# 1.连接MySQL conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd="root123", charset='utf8', db='unicom') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 2.发送指令 cursor.execute("insert into admin(username,password,mobile) values('wupeiqi','qwe123','15155555555')") conn.commit()# 3.关闭 cursor.close() conn.close()
-
Django开发操作数据库更简单,内部提供了ORM框架。
安装第三方模块
pip install mysqlclient
ORM
ORM可以帮助我们:
- 创建、修改和删除数据库中的表 (不用写SQL语句)。【无法创建数据库】
- 操作表中的数据
-
自己创建数据库
-
django链接数据库
在settings.py文件中进行配置和修改。
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django_test', # 数据库名字'USER': 'root','PASSWORD': 'root','HOST': 'localhost', # 那台机器安装了MySQL'PORT': 3306,} }
-
django操作表
创建表:在models.py文件中
在终端中执行命令:
python manage.py makemigrations python manage.py migrate
注意:app需要提前注册。
若要在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:
-
1,手动输入一个值。
-
设置默认值
age = models.IntegerField(default=2)
-
允许为空
data = models.IntegerField(null=True, blank=True)
以后在开发中如果想要对表结构进行调整:
-
在models.py文件中操作类即可。
-
命令
python manage.py makemigrations python manage.py migrate
-
-
操作表中的数据
# #### 1.新建 #### # Department.objects.create(title="销售部") # Department.objects.create(title="IT部") # Department.objects.create(title="运营部") # UserInfo.objects.create(name="武沛齐", password="123", age=19) # UserInfo.objects.create(name="朱虎飞", password="666", age=29) # UserInfo.objects.create(name="吴阳军", password="666")# #### 2.删除 #### # UserInfo.objects.filter(id=3).delete() # Department.objects.all().delete()# #### 3.获取数据 #### # 3.1 获取符合条件的所有数据 # data_list = [对象,对象,对象] QuerySet类型 # data_list = UserInfo.objects.all() # for obj in data_list: # print(obj.id, obj.name, obj.password, obj.age)# data_list = [对象,] # data_list = UserInfo.objects.filter(id=1) # print(data_list) # 3.1 获取第一条数据【对象】 # row_obj = UserInfo.objects.filter(id=1).first() # print(row_obj.id, row_obj.name, row_obj.password, row_obj.age)# #### 4.更新数据 #### # UserInfo.objects.all().update(password=999) # UserInfo.objects.filter(id=2).update(age=999) # UserInfo.objects.filter(name="朱虎飞").update(age=999)