1.1URL组成部分
URL是Uniform Resource Locator 的简写,统一资源定位符
一个URL由以下几个部分组成:
scheme://host:port/path/?query-string=xxx#anchor
-
scheme:代表的是访问的协议,一般为http或者https以及ftp等
-
host:主机名,域名,比如www.baidu.com
-
port:端口号。HTTP协议是80端口,HTTPS协议是443端口。
-
path:查找路径。比如www.jianshu.com/trending/now,后面的trenfing/now就是path
-
query-string:查询字符串,比如:www.baidu.com/s?wd=python,后面的wd=python就是查询字符串
-
anchor:锚点,后台一般不用管,前端用来做页面定位的
注意:URL中的所有字符都是ASCII字符集,如果出现非ASCII字符,比如中文,浏览器会进行编码再进行传输
1.2第一个django项目.md
1.2.1项目文件介绍
mysite
manage.py 【项目的管理、启动项目、创建app、数据管理】【不要动】【常常用】
Mysite
__init__.py
settings.py 【项目配置】 【常常操作】
urls.py 【url和函数的对应关系】【常常操作】
asgi.py 【接受网络请求】【不要动】
wsgi.py 【接受网络请求】【不要动】
1.2.2project和app的关系
app是django项目的组成部分。一个app代表项目中的一个模块,所有URL请求的响应都是app来处理。
django项目会由许多app组成,一个app可以被用到其他项目,django也能拥有不同的app
1.2.3app介绍
-
app,用户管理【表结构、函数、HTML模板、css】
-
app,订单管理【表结构、函数、HTML模板、css】
-
app,后台管理【表结构、函数、HTML模板、css】
-
app,网站 【表结构、函数、HTML模板、css】
-
app,APL 【表结构、函数、HTML模板、css】
······
注意:我们开发比较简洁,通常只需要在项目下直接创建一个app
在pycharm的终端中输入python manage.py startapp app即可自动创建一个app01文件夹
1.2.4app的文件解读
__init__.py
admin.py 【固定,不用动】django默认提供了后台管理
apps.py 【固定,不用动】app启动类
Migrations 【固定,不用动】数据库变更记录
__init__.py
models.py 【重要】,对数据库操作
tests.py 【固定,不用动】单元测试
views.py 【重要】函数
1.3URL分发.md
1.3.1URL与视图的映射
1.确保app已注册【settings.py】
2.编写URL和视图函数的对应关系【urls.py】
3.编写视图函数【views.py】
4.启动django项目
方法一:命令行启动
python3.12 manage.py runserver
方法二:pycharm启动
直接运行程序
1.3.2在URL中携带参数
-
通过查询字符串(qiery string):http://www.baidu.com/s?wd=python&a=1&b=2
-
在path中携带:http://127.0.0.1:8000/book/2
方式一:查询字符串http://127.0.0.1:8000/book?id=3&name=xx
方式二:http://127.0.0.1:8000/book/3
注意:在book_id前指定参数类型有两点好处
-
以后在浏览器中,如果book_id输入的是非整形,就会出现404错误
-
在视图函数中,得到的book_id就是一个整形,否则,默认会是str类型
1.3.3path函数
1.3.4url中包含另外一个urls模块
# startjango/urls.py文件
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path("admin/", admin.site.urls),
path('movie/', include('movie.urls')),
]
在urls.py文件中把所有的和book这个app相关的url都移动到app/urls.py中了,然后在startdjango/urls.py中,通过include函数来包含book.urls,以后在请求book相关的url时都需要加一个book的前缀
# movie/urls.py文件
from djangolearning02.urls import path
from . import views
# 指定应用名称(应用命名空间)
# 避免多个app中定义相同的名字
app_name = 'movie'
urlpatterns = [
path('list', views.movie_list, name='movie_list'),
path('detail/<int:movie_id>', views.movie_detail, name='movie_detail'),
]
# movie/views.py文件
from django.shortcuts import render, HttpResponse
# Create your views here.
def movie_list(request):
return HttpResponse("电影列表")
def movie_detail(request, movie_id):
return HttpResponse(f"您获取的电影id是:{movie_id}")
1.3.5url反转
-
之前都是通过url来访问视图函数,有时候我们知道这个视图函数,但是想反转他的url,这时候就可以通过reverse来实现示例代码如下:
reverse("list")
>/book/list/
-
如果有应用命名空间或者有实例命名空间,那么应该在反转的时候加上命名空间,示例代码如下:
reverse("book:list")
>/book/list/
-
如果这个url中需要传递参数,那么可以用kwargs来传递参数,
示例代码如下:
reverse("book:detail", kwargs={"book_id":1})
>/book/detail/1
-
因为django中的reverse反转url的时候不区分GET请求和POST请求,因此不能在反转时候添加查询字符串的参数。如果想要添加查询字符串的参数,只能手动添加,示例代码如下:
login_url = reverse('login') + "?next=/"