Django之知识总结

1. 课程介绍   - 数据类型   - 函数   - 面向对象三大特性:继承,封装,多态   - socket:本质传输字节;所有网络通信都基于socket   - 数据库设计:单表、FK、M2M (自己作业:自己领域设计表,相亲网站)   - 会用:html/css/js/bootstrap2. Http知识

基于Socket

浏览器(格式一):      Web服务器(格式一):

MySQL客户端(格式二):      MySQL服务端(格式二):

本质:         socket = socket.socket()         socket.connect((ip,端口))         socket.sendall(b‘87ljas9802jlksjdf098jlksdf09‘)

浏览器发送GET请求数据格式:      socket = socket.socket()      socket.connect((ip,端口))      socket.sendall(b‘GET /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\n‘)

request.GET.get(‘name‘)

浏览器发送POST请求数据格式:      socket = socket.socket()      socket.connect((ip,端口))      socket.sendall(b‘POST /index/?name=xxx&age=11 http1.1\r\nAccept:text/html\r\nAccept-Encoding:gzip, deflate\r\nCookie:UM_distinctid=15d274\r\n\r\na1=123&a2=666&a3=xx‘)

Django加工POST请求的数据,      判断用户是否传递的是Django可以向request.POST中解析的数据?读取请求头Content-Type: application/x-www-form-urlencoded,那么就去解析request.body中的值,放置到request.POST中                          a1=123&a2=666&a3=xx                               request.POST.get(‘name‘)                          request.body   b"a1=123&a2=666&a3=xx"

Django加工POST请求的数据:{a1:123,a2:567}                               request.POST   空                          request.body   b"{a1:123,a2:567}"

Http协议      - 请求头和请求体分割:\r\n\r\n      - 请求体之间:\r\n       - GET无请求体      - 无状态,短连接:socket请求响应断开      - 请求头代表的意义         - user-agent:来源         - referer: 防盗链         - content-type:请求体是什么格式?

3. Django请求生命周期

wsgiref:      函数版本:         from wsgiref.simple_server import make_server

def run_server(environ, start_response):            start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])            return [bytes(‘<h1>Hello, web!</h1>‘, encoding=‘utf-8‘), ]

if __name__ == ‘__main__‘:            httpd = make_server(‘127.0.0.1‘, 8000, run_server) # 请求一旦到来:run_server(..)            httpd.serve_forever()

类版本:         from wsgiref.simple_server import make_server

class WsgiHandler(object):

def __call__(self,environ, start_response):               start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])               return [bytes(‘<h1>Hello, web!</h1>‘, encoding=‘utf-8‘), ]

if __name__ == ‘__main__‘:            obj =WsgiHandler()            httpd = make_server(‘127.0.0.1‘, 8000, obj) # 请求一旦到来:obj(..)            httpd.serve_forever()

# 类()   -> __init__         # 类()() -> __call__

生命周期:图

注意:      渲染工作在Django中执行完成后,字符串返回给浏览器。      但是:js,css额外再发一次请求仅获取静态文件

4. 问题:   a. TemplateDoesNotExist       - 写错误      - 配置      - 文件夹

b. 静态文件404      - 写错误      - 配置      - 文件夹

5. Django所有知识点:   知识点:      1. 路由规则         - /index/ func         - /\d+/   func()         - /?P<name(\d+)>/   func()   #有名分组         - include  用来进行路由的分发  url(r‘^blog/‘, include(‘blog.urls‘))

- 反向生成URL:#这个不太熟悉            - {%url ""%}            - reverse(‘a1‘,args=(1,))

2. 视图函数:         请求相关:            request:               method  #看函数获取数据的方法               GET.get/.getlist   用来获取数据单个数据用get,列表用getlist               POST     #同上               COOKIES               #设置是在三次请求中的第二次返回时设置COOKIES                # obj=redirect("/home/")#给浏览器一个cookie在返回时                        # # obj.set_cookie("is_login",True,20)#设置一个cookie,它是一个字典类型的                        # # obj.set_cookie("username",username)                        # return obj                        获取COOKIES的值                         # is_login=request.COOKIES.get("is_login",None)#判断这个页面是否带着cookie                        删除COOKIES                        response.delete_cookie("cookie_key",path="/",domain=name)               session               #设置session值                       request.session["is_login"]=True#设置session值                       request.session["USER"]=username                       获取                       ret=request.session.get("is_login",None)#获取session里面的键值对                       删除session                       # del request.session["IS_LOGON"]#这是删除一个键值对                       request.session.flush()这是删除整条记录                       Django自带的认证系统:                       user=auth.authenticate(username=user,password=pwd)#判断是否在数据库内                       auth.login(request,user)登陆的语法                       User.objects.create_user(username=user,password=pwd)这是创建新用户时的语法                       更改密码操作:

user      request.user获取当前用户的名字               body      所有的数据都在body里               request.FILES   获取上传的文件

响应相关:(三种方法都是字符串)            render            HttpResponse            redirect      3. 模板语言         if for   模板的if和for循环         索引:. 句点符         执行:不加括号自动执行函数

filter和simple_tag

4. ORM操作         创建表:            类            字段:INT,CHA,FK,M2M  # 外键的关系         操作表:(CURD)增删改查            13操作(13中操作)               - 

补充:               filter               values                vlaues_list

all/values/values_list

__   了不起的下划线

正向和反向  #数据的查询正向与反向

整理:      - 路由对应关系:

- 模板继承

- 模板标记标签:for,if,

- 返回:         - HttpResponse         - render         - redirect

- 启动

- Model类的创建,继承Model

- migrate

- 模板自定义函数:filter,sample_tag

- cookie和Session

- 基本配置文件:         - 模板         - 静态文件       - MySQL         和proejct同名的目录的__init__

- Model中自定义方法:__str__

- Model操作:         创建:            create            save            bulk_create         13中操作:            filter(nage=‘xx")            filter(**{age:18})            values(‘id‘)            values(*[‘id‘,‘name‘])            values_list            last            first             all            distict            exclude            get             update(age=11)            update(**{age:11})            delete()      - 多对多查询(查询)

- URL别名,目的:反向生成URL         /detail/(\d+)/  name = a1

from django.url import reverse

url = reverse(‘a1‘,args=[6,])

- Django自带auth验证

- 模板 

- 分页

- 分组和聚合 
时间: 2024-10-30 00:19:13

Django之知识总结的相关文章

Django[基础知识]

Python功能最全的WEB框架:Django,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. 使用Django需进行以下操作: 1.创建Django项目,创建方式有两种. a.命令操作: django-admin startproject  dg_web   //dg_web为项目名称 b.直接在开发环境IDE下进行新建django项目 创建项目之后的文件目录如下: 2.在创建的项目下建立功能程序,操作如下: 命令行:python manage.py startap

Django基础知识二

别名 url views 写一个对应的reg函数,这个函数进来第一件事应该是给客户端返回一个页面. 所以先写一个Html 这个action写的是/reg/ 然后继续写函数 之所以上面的action处直接写/reg/可以使用,不用写上具体的ip+port是因为 当客户点击submit的时候,浏览器会将前面的Ip和端口自动补全,这个ip和端口是服务器提供的. ======================================= 别名这个操作是在url里写的. 因为url里的地址和html里

Django 相关知识

布局:    header    body    footer    $(#).hide()    补充:    cursor:pointer; 针对A标签,鼠标变小手    A标签下划线消失:text-decoration:none    z-index:值,图层分布    圆角:border-radius:50%    .header.menu a:hover{}        鼠标点中变颜色    例子:    <!DOCTYPE html><html lang="en&

Django进阶知识

Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost') cursor = db.cursor() cursor.

django基础知识笔记

1,urls中name设置使用  表单提交的时候url更改了.模板不用更改 url=Reg from django.conf.urls import url,includefrom django.contrib import adminfrom app01 import viewsurlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'app01/',include('app01.urls')), url(r'reg',views.re

django基础知识之分页:

分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数 属性 count:对象总数 num_pages:页面总数 page_range:页码列表,从1开始,例如[1, 2, 3, 4] 方法 page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常 异常exception InvalidPage:当向page

django基础知识之上传图片:

上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="" />中的name 注意:FILES只有在请求的方法为POST 且提交的<form>带有enctype="multipart/form-data" 的情况下才会包含数据.否则,FILES 将为一个空的类似于字典的对象 使用模型处理上传文件:将属性定义成model

django基础知识之URLconf:

URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称name 编写URLconf的注意: 若要从url中捕获一个值,需要在它周围设置一对圆括号 不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/' 每个正则表达式前面的r表示字符串不转义 请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求

django基础知识之状态保持session:

状态保持 http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 存储方式包括cookie.session,会话一般指session对象 使用cookie,所有数据存储在客户端,注意不要存储敏感信息 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据