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 | from django.http import HttpResponse |
然后去project文件夹里的urls.py添加路由信息:
1 | from myapp import views |
然后就可以看到了
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 | from django.shortcuts import render |
返回值需要是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 | def drinks(request, drink_name): |
还可以使用正则表达式(regular
expressions来匹配参数,这时需要用re_path
函数。
Error Handling
在view.py里可以添加error handler,可以处理400,401,402,404,500
在settings.py里添加DEBUG=FALSE可以关闭默认error信息:
只有关闭默认debug模式后才能显示自定义的error页面。
首先在project的urls.py里添加:
1 | from . import views |
然后在这个文件夹里新建一个view.py文件,里边定义error 处理函数:
1 | from django.http import HttpResponse |
Model
使用model可以进行从App到数据库的交互,并且进行CURD操作。这些操作都有django预设的函数实现。
创建model
一个model就相当于一个数据表,在app的models.py文件里创建。
1 | class Menu(models.Model): |
用migration更新表结构
假如想给model表加一个字段,只需要在class里添加一行字段,然后在cmd里使用migration语句来更新。
语句:
- makemigrations
- migrate
- sqlmigrate
- showmigrations
sqlmigrate是用来显示当前操作对应的SQL语句的,可以帮助你debug或者理解。
更新
先用makemigration
来初始化,然后用migrate
应用变化。
makemigration后边加app名也可以只更新这个app的model。
回溯
每次变化都会在migrations文件夹里新建一个py文件,使用migrate 0001
可以回溯到这次的更改。