安装
版本的安装:
pip install django==1.11.18
在python的环境下使用 import python ,不报错就说明是可以的。
退出命令:quit()
查看版本是 进入python命令并且引入django
import django
django.version
创建一个项目
这个命令可以全局使用,应该是。
django-admin.py startproject my_project
进入项目,然后启动服务:
python manage.py runserver
创建模块:
python manage.py startapp accounts
汉化
在设置里边 plugin 搜索 chinese
创建目录:
utils new的时候是创建一个package的包
static 里边放 js css image upload lib
template 放html文件
视图文件对应关系
在mall文件下的urls里边编写视图和文件的对应关系
具体配置代码:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
路径对应的是某个文件里边的方法。这里对应的是views.index的方法,所以需要建立一个views的文件里边是index方法。
具体过程:
主要是分成两步,
两个文件都是在项目文件名称下
一个是在urls.py 进行设置:
from django.contrib import admin
from django.urls import path
from mall import views
urlpatterns = [
path('admin/', admin.site.urls),
path("",views.index,name="index")
]
然后新建一个views.py 就是通过视图对应的寻找html模板文件,模板文件必须是放在templates里边的。
views.py 代码如下:
from django.shortcuts import render
def index(request):
return render(request,"index.html")
犯错:
render 函数必须加 request 这个参数,否则报错
from django.shortcuts import render
def index(request):
return render(request,"index.html")
静态文件的读取
主要是对静态文件开权限,就是可以被访问到
在项目名称文件下的settings.py中查看静态文件的配置:
需要配置一下目录,配置的网址在注释里,从网址粘贴过来就可以:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
视图快捷方法
视图向页面输出的内容:
如下代码:
from django.http import HttpResponse
#测试
def test(request):
return HttpResponse("haha")
# 会在页面上输出haha,其实是可以输出一段html的并且可以调整样式。
输出html的结构如下:
#测试
def test(request):
now=datetime.now()
html="<h1 style='color:red;'>now:::{0}</h1>".format(now)
return HttpResponse(html)
视图获取参数
配置文件爱
#测试页面,后边必须加上/表示结束 ,
path("test/<int:year>/",views.test)
方法:
#测试,谨记 这种获取方式是 /参数 是这种形式
def test(request,year=2021):
print("year::>>{0}".format(year))
now=datetime.now()
html="<h1 style='color:red;'>now:::{0}</h1>".format(now)
return HttpResponse(html)
如果是param参数则是如下获取方法:
通过request进行一个获取
#测试
def test(request,year=2021):
print("year::>>{0}".format(year))
m=request.GET.get("month",None);#None是默认值
now=datetime.now()
html="<h1 style='color:red;'>now:::{0}</h1>月份{1}".format(now,m)
return HttpResponse(html)
如果是post则是:
m=request.POST.get("month",None)
视图获取传递过来的参数
跳转到某个页面,并且值传递过去:
return render(request,'test.html',{
"now":now
})
test.html结构如下:
<body>
now::{{now}}
</body>
s
所以html结构是完全可以进行获取的。
重定向
url的配置:
path("index1/",views.index1,name="index1"),
path("index2/",views.index2,name="index2")
重定向的方法如下:
def index1(request):
return redirect("/index2/");#访问index的url时跳转到index2的rul上,一般建议用url的name,即使url以后变化也不影响
def index2(request):
return render(request,"index2.html")
400与500的错误
默认python是调试模式,其实是可以设置模式的。
在setting.py 中修改配置:
# SECURITY WARNING: don't run with debug turned on in production!生产环境
DEBUG = False
#设置哪些地址是可以访问的
ALLOWED_HOSTS = ["*"]
我们以handler404为例说明一下,主要是分成两步:
第一步是覆盖变量,然后给这个变量赋值一个方法,这个方法是视图方法,如下代码:
handler404=views.page_404
视图方法:
def page_404(request,exception):
return HttpResponse("内容丢失,请稍后再尝试...",status=404)
静态文件的处理
在setting.py中添加如下的内容:
设置里边设置这个:
STATIC_ROOT = "/var/www/example.com/static/"
然后运行如下操作就可以:
$ python manage.py collectstatic
request
m=request.GET.get("month",None);#None是默认值
如果是query的方式,那么就直接在参数里边进行接收了:
这个里边的year就是 query的方式。
def test(request,year=2021):
print("year::>>{0}".format(year))
输出形式
可以是text/html ,text/pain , application/json
接口的形式就是application/json进行输出的,举例说明,如果输出json的格式的操作:\
def json_test(request):
user_info={
"name":"laohu",
"age":30
}
#把python的字典转换成json的格式
user_info_json=json.dumps(user_info)
return HttpResponse(user_info_json,content_type="application/json")
直接使用json的相关方法:
def json_test(request):
user_info={
"name":"laohu",
"age":30,
"sex":"男"
}
#把python的字典转换成json的格式
# user_info_json=json.dumps(user_info)
# return HttpResponse(user_info_json,content_type="application/json")
return JsonResponse(user_info);
response的输出
def write_test(request):
resp=HttpResponse("nihao",status=200)
#在原来输出的基础上再添加输出的内容
resp.write(" --haha")
return resp
文件的输出:
def file_test(request):
#获取当前mall项目的根路径 + 加上图片的路径
file_path=os.path.join(mall.settings.BASE_DIR,"static/medias/1.jpg")
#获取当前文件的二进制
file_rb=open(file_path,'rb')
#输出二进制
return FileResponse(file_rb)
输出来的是图片,图片是二进制的操作,但是这里不需要单独去设置二进制的问题。
而是直接显示图片。
视图
通过视图来展示模板。
配置视图:urls.py中进行配置
path("show_class/",views.ShowClassView.as_view(),name="ShowClassView")
视图是写一个类,我们主要是重写这个类:\
#如果是视图的话,需要继承TemplateView
class ShowClassView(TemplateView):
#这个是固定写法,是这个视图类所对应的模板文件
template_name = "show_class.html"
模板
模板文件是写在templates里边