Django开发入门详解
1.Django概述
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
Django 框架的核心组件有:
- 用于创建模型的对象关系映射;
- 为最终用户设计较好的管理界面;
- URL 设计;
- 设计者友好的模板语言;
- 缓存系统。
Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。
MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:
2.Django项目环境搭建
搭建Django开发环境
-
创建Django项目 也可以pycharm创建
>>>django-admin startproject 项目名
-
创建APP
>>>cd 项目目录 >>>python manange.py startapp app名称
-
注册app
- 不注册,models.py生成数据库表行为不执行。 - 不注册,模板文件、静态文件,不回去app目录下找。
-
static目录,静态文件目录
-
templates目录,模板文件目录(HTML)
-
表结构设计 app01/modes.py下执行
from django.db import models class UserInfo(models.Model): v1 = models.CharField(max_length=32) ... ..
>>>python manage.py makemigrations >>>python manage.py migrate
-
urls.py 中编写路由。
from django.urls import path,re_path from app01 import admin urlpatterns = [ path('admin/list/', admin.admin_list), path('admin/<int:nid>/delete/', admin.admin_delete), re_path('admin/(?P<nid>\d+)/delete/', admin.admin_delete) ]
-
视图函数
def admin_list(request): k1 = request.POST.get("k1") ... 业务处理 return 数据 - 默认参数request,包含请求相关的所有数据。 request.method request.GET request.POST request.FILES,上传文件。 request.path_info,获取当前请求的URL http://127.0.0.1:8000/depart/add/ -> /depart/add/ - 返回值 return HttpResponse("字符串") return JSONResponse( {"status":123,"data":[456,55,66,22,]} ) return JSONResponse( [11,22,33,44] ,safe=False) return render(request,"xxx.html",{值}) return redirect("http://127.0.0.1:8000/depart/add/") return redirect("/depart/add/")
-
数据库的ORM操作
# 增加 models.类.objects.create(name="武沛齐",age=19) models.类.objects.create(**{"name":"武沛齐","age":19}) obj = models.类(name="武沛齐",age=19) obj.save() obj_list = [ models.类(name="武沛齐",age=19), models.类(name="武沛齐",age=19), models.类(name="武沛齐",age=19), models.类(name="武沛齐",age=19), models.类(name="武沛齐",age=19) 。。。 ] models.类.objects.bulk_create(obj_list,batch_size=10)
# 查询 queyrset = models.类.objects.filter(name="武沛齐",age=19) # [obj,obj,] queyrset = models.类.objects.filter(**{"name":"武沛齐","age":19}) # [] obj = models.类.objects.filter(name="武沛齐",age=19).first() # obj / None queyrset = models.类.objects.filter(age=19) queyrset = models.类.objects.filter(age__gt=19) queyrset = models.类.objects.filter(age__gte=19) queyrset = models.类.objects.filter(age__lt=19) queyrset = models.类.objects.filter(age__lte=19) queyrset = models.类.objects.filter(age__gt=19, name="武沛齐") queyrset = models.类.objects.filter(name__contains="中国") queyrset = models.类.objects.exclude(id=9) # id !=9 queyrset = models.类.objects.filter(age=19).order_by("id") queyrset = models.类.objects.filter(age=19).order_by("-id") queyrset = models.类.objects.filter(age=19).order_by("-id","name") queyrset = models.类.objects.filter(age=19)[0:10]
# 更新 queyrset = models.类.objects.filter(id=2).update(age=19,name="武沛齐") queyrset = models.类.objects.filter(id=2).update(**{"name":"武沛齐","age":19}) obj = models.类.objects.filter(id=2).first() obj.name = "武沛齐" obj.age = 19 obj.save()
# 删除 models.类.objects.filter(id=2).delete()
整理的所有ORM操作: https://www.cnblogs.com/wupeiqi/articles/6216618.html
-
Form和ModelForm组件
- 自动生成HTML标签 - 对用户请求的数据进行校验 - 自动保存到数据库(ModelForm) - 错误信息
from django import forms class UserForm(forms.Form): xx = forms.CharField(...) class UserModelForm(forms.ModelForm): class Meta: model = models.类 fields = "__all__"
form = UserModelForm(data=request.POST,instance=对象) if form.is_valid(): form.cleaned_data else: form.errors
-
关于POST提交CSRF认证
<form method='post'> {% csrf_token %} ... </form>
如果想要免除csrf认证。
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def order_add(request): pass
-
Cookie和Session
cookie,本质上保存在浏览器端的键值对。 session,保存服务器端(django是将session默认存储在数据库中) def order_add(request): request.session['xx'] = 123 def logout(request): request.session.clear()
-
中间件
- 类 process_request / process_response - 注册中间件类 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'app01.middleware.auth.AuthMiddleware', ] - django请求到达之后,自动会执行相应的方法。 - process_request - 没有返回值或返回None,继续向后执行。 - 返回redirect/render/HttpResponse/JsonReponse,拦截请求不再继续向后之后。
-
图片验证码
pip install pillow
- 创建图片并在图片上写文字 - 字体文件 - 自定义模块 check_code
-
分页组件
开发时候会用。