Django-learn

Django note from the course "Django Web Framework" by Meta.

Intro to Django

Creating first project

Django 可以用django-admin或者文件夹里的manage.py来控制。

创建新项目:$ django-admin createproject

app是用来进行某一种任务的,project是大项目。

Views.py用来处理request并且返回页面。

urls.py用来

创建新app:$ python -m django startapp myapp

创建app之后需要在installed_apps添加app名

创建新页面:在app的view.py文件里添加:

1
2
3
4
from django.http import HttpResponse

def home(request):
return HttpResponse("Hello, Django!")

然后去project文件夹里的urls.py添加路由信息:

1
2
3
4
5
from myapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
]

然后就可以看到了

Include app的 view:

path('', include('myapp.urls'))

运行服务器:$ python manage.py runserver

MVT

Django 是 MVT 模型, 包含model,view 和template.

model存储数据,view处理逻辑,template是表示层。

数据层负责和数据库的交互

Views

使用View处理HTTP request,在app 文件夹里的views.py文件里定义。

每个函数都需要接收一个http request参数,返回一个HTTP response.

要想显示这个view里的函数,需要去project级的urls.py先import这个view文件,然后在urlpatterns里添加。

View logic

view的用处主要是通过request来获取数据,应用一些处理后返回response。

他可以处理REST API:

1
2
3
4
5
6
7
8
9
from django.shortcuts import render     

def myview(request):
if request.method=='GET':
val = request.GET['key']
#perform read or delete operation on the model
if request.method=='POST':
val = request.POST['key']
#perform insert or update operation on the model

返回值需要是HTTPresponse类型的obj

Request and URLs

HTTP requests

Get: 从服务器获取数据

post:向服务器发送数据

put:更新数据

delete:删除数据

一个HTTP返回值包含很多消息,例如当前使用的HTTP版本,请求信息。200是成功。

HTTPS使用加密来保护request 和 response的安全。

在view里接收到request之后,根据他种类不同可以进行不同操作。

URL parameter

path('drinks/<str:name>'view.drinks,name="drinks"),

这里name就是一个url的参数,通过改变这个值就可以返回不同的response。

在view的函数里需要定义接收参数:

1
2
3
4
5
6
7
8
def drinks(request, drink_name):
drink = {
'mocha' : 'type of coffee',
'tea' : 'type of hot beverage',
'lemonade': 'type of refreshment'
}
choice_of_drink = drink[drink_name]
return HttpResponse(f"<h2>{drink_name}</h2> " + choice_of_drink)

还可以使用正则表达式(regular expressions来匹配参数,这时需要用re_path函数。

Error Handling

在view.py里可以添加error handler,可以处理400,401,402,404,500

在settings.py里添加DEBUG=FALSE可以关闭默认error信息:

image-2024091013158334 PM

只有关闭默认debug模式后才能显示自定义的error页面。

首先在project的urls.py里添加:

1
2
3
from . import views
...
handler404 = 'test1.views.handler404'

然后在这个文件夹里新建一个view.py文件,里边定义error 处理函数:

1
2
3
4
from django.http import HttpResponse

def handler404(request, exception):
return HttpResponse("1111404: Page not found")

Model

使用model可以进行从App到数据库的交互,并且进行CURD操作。这些操作都有django预设的函数实现。

创建model

一个model就相当于一个数据表,在app的models.py文件里创建。

1
2
3
4
5
class Menu(models.Model):
name = models.CharField(max_length=50)
price = models.IntegerField()
description = models.TextField()
image = models.ImageField(upload_to='menu_images/')

用migration更新表结构

假如想给model表加一个字段,只需要在class里添加一行字段,然后在cmd里使用migration语句来更新。

语句:

  • makemigrations
  • migrate
  • sqlmigrate
  • showmigrations

sqlmigrate是用来显示当前操作对应的SQL语句的,可以帮助你debug或者理解。

更新

先用makemigration来初始化,然后用migrate应用变化。

makemigration后边加app名也可以只更新这个app的model。

回溯

每次变化都会在migrations文件夹里新建一个py文件,使用migrate 0001可以回溯到这次的更改。