1.创建app
- 使用pycharm创建:File -- > New Project
app文件解释:
migrations:模型操作的迁移文件
admin.py:django后台带了管理的小系统,管理文件
apps.py:注册的文件
models.py:写表生成的代码codefirst优先代码生成
test.py:测试文件
view.py:视图文件,将业务逻辑写在视图文件中
- 在命令行输入:python manage.py startapp app的名字 创建app
2.路由的分组
如果将所有的业务逻辑写在一个url.py文件中,操作简单,但业务逻辑会变得越来越复杂,导致代码会越来越多,越来越乱;同时,违反了“高内聚低耦合”的原则。
- 将业务逻辑写入到app中的views中(不推荐)
- 使用include来进行app分组
# 在urls.py文件中
from django.conf.urls import url,include # include
urlpatterns = [
url(r'^classes/',include('classes.urls')) # 总部url,将classes这个app下的urls引入进来,将请求发给classes的urls
]
# 在其他剩余的app文件中添加urls.py文件,以classes为例:
from django.conf.urls import url
from classes import views
urlpatterns = [
url(r'^get_classes/',views.get_classes)
]
# 在这个app的views中,添加业务逻辑处理函数,以classes为例
from django.shortcuts import render,HttpResponse
def get_classes(request):
return HttpResponse('classes list')
3.路由的分发
核心是正则匹配表达式匹配
FBV (function based views):使用函数来处理业务逻辑
# 127.0.0.1:8000/test/123/nick/: 可以跟参数的分发,后台希望获取123、nick两个参数
urlrouters:
url(r'^test/(w+)/(w+)/',views.test) # 根据排列位置传递
url(r'^test/(?P<id>w+)/(?P<name>w+)/',views.test1) # 不受排位的影响,id就是传给id
url(r'^',view.notfound) # 自定制404notfound的页面
url(r'^loginsdsafdafdsafds/$',views.login,name='m1') # 反向路由,name可以自定义,会根据name的值反向生成这个loginsdsafdafdsafds/,放到action中。称为方向路由解析
def test(request,id,name):
print(id,name) # 123传给id,nick传给name
def test(request,name,id):
print(name,id) # 123传给name,nick传给id
def test1(request,name,id):
print(id,name) # 123传给id,nick传给name
# 自定制404notfound的页面
def notfound(request):
return render(request,'404.html')
def login(request):
return render(request,'login.html')
# login.html
<form action='{% url 'm1' %}' method='post'>
<input type='text'>
</form>
注意:
# 如果没有?P的约束,传参的时候,会根据顺序来获取参数对应的值
# 如有有约束的话,传参的时候,会固定的将获取的值传给所对应的约束
CBV(class based views):使用类来处理业务逻辑
urlpatterns = [
url(r'^login/$',views.Login.as_view()), # 当请求过来的时候,会优先判断你的请求方法是GET还是POST,如果是GET请求的话走get函数,反之走post函数
]
from django.views import View
class Login(View):
def dispatch(self,request,*args,**kwargs):
# 在这里可以做预处理操作
handler = super(Login,self).dispath(request,*args,**kwargs)
return handler
def get(self,request):
return render(request,'login.html')
def post(self,request):
pass
# get:获取信息的
# post:提交数据用post方式
# put:更新数据
# patch:部分更新
# delete:删除
# form表单的提交方式,只支持GET/POST,ajax提交方式,全部支持