您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
遵循MVC设计模式的框架,MVC是Model、View、Controller的三个单词的简写。分别代表模型、视图、控制器。
# 创建项目
1、命令行:django-admin startproject [项目名称]
2、pycharm方式:文件->创建项目->选择django。然后指定项目所在的路径,以及python解释器。
#运行项目
python manage.py runserver
可添加端口 python manage.py runserver 8088
对公访问 python manage.py runserver 0.0.0.0 8088
python manage.py startapp django_1
django.http.response.HttpResponseBase
的子类的对象。ROOT_URLCONF
为urls.py
。所有的django会去urls.py中寻找。urls.py
中我们所有的映射都应该放在urlpatterns
这个变量中。path
函数或者是re_path
函数进行包装的。<参数名>
的方式传递参数,然后在视图函数中也要写一个参数。视图函数中的参数必须和url中的参数名称保持一致,不然找不到这个参数。request.GET.get('参数名称')
的方式来获取。代码如下:
def author_detail(request):
author_id = request.GET['id']
text = '作者的id是:%s' % author_id
return HttpResponse(text)
因为查询字符串使用的是GET
请求,所以我们通过request.GET
来获取参数,并且因为GET
是一个类似于字典的数据类型,所有获取值跟字典的方式都是一样的。
如何给一个url指定名称
在path函数中,传递一个name
参数就可以指定。
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.index,name='index'),
path('signin/',views.login,name='login')
]
# views.py
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse('首页')
else:
return redirect(reverse('login'))
应用命名空间
在多个app之间,有可能产生同名的url。这时为了避免反转url的时候产生混淆,可以使用应用命名空间来做区分。定义应用命名空间非常简单,只要在app的urls.py中定义一个叫做app_name的变量来指定这个应用的命名空间即可。
# urls.py
from django.urls import path
from . import views
app_name = 'front'
urlpatterns = [
path('',views.index,name='index'),
path('signin/',views.login,name='login')
]
# views.py
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse('首页')
else:
return redirect(reverse('front:login'))
# 一个app可以创建多个实例,可以使用多个url映射同一个app。在做反转的时候使用应用命名空间,那么就会发生混淆,为了避免这个问题就可以使用实例命名空间。在include函数中传递一个namespace变量即可。
# urls.py
from django.urls import path,include
urlpattterns = [
path('',include('front.urls')),
path('cms1/',include('cms.urls',namespace='cms1')),
path('cms2/',include('cms.urls',namespace='cms2'))
]
多个app后主app的urls.py里的urlpatterns会写入过多路径,可通过在app里创建自身app对应的urls.py来方便路径转发。
# 主urls.py,使用include函数包含子urls.py
from django.urls import path,include
urlpattterns = [
path('book/',include('book.urls'))
# 以book开头的url都会转到book app下的urls.py
]
# book app的 urls.py
from django.urls import path
from . import views
urlpattterns = [
path('',views.book),
path('detail/<book_id>',views.book_detail),
path('list/',views.book_list),
]
1、如果反转url的时候,需要添加参数,那么可以传递kwargs参数到reverse函数中。
2、如果想要添加查询字符串的参数,则必须手动的
进行拼接。
# views.py
from django.http import HttpResponse
from django.shortcuts import reverse,redirect
def index(request):
username = request.GET.get('username')
if username:
return HttpResponse("首页")
else:
# login_url = reverse('login') + "?next=/"
# return redirect(login_url)
detail_url = reverse('detail',kwargs={'article_id':1,'page':2})
return redirect(detail_url)
def login(request):
return HttpResponse("登录页面")
def article_detail(request,article_id):
text = '您的文章id是:%s' % article_id
return HttpResponse(text)
# urls.py
from django.urls import path
from front import views
urlpatterns = [
path('',views.index,name='index'),
path('login/',views.login,name='login'),
path('detail/<article_id>/<page>/',views.article_detail,name='detail')
]
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。