Django框架

一、网页基础知识

网络连接过程

  • 关系:
    • socket客户端
      • 浏览器完成
    • socket服务器端
      • 编写网页程序实现
  • HTTP
    • 无状态、短连接:通讯结束后即断开连接

服务器端的基本逻辑过程

import socket

sock=socket.socket()
sock.bind('127.0.0.1',8080)
sock.listen()

while True:
    conn,addr=sock.accept()
    data=conn.recv(8096)
    conn.send(b'123123') #服务器端返回的数据,一般返回的是HTML页面
    conn.close()

自己写网站:
a. socket服务端
b. 根据URL不同返回不同的内容

  1. 路由系统:URL->函数

c. 字符串返回给用户

  1. 模板引擎渲染:
    1. HTML充当模板(特殊字符)
    2. 自己创造任意数据
  2. 返回的内容本质是字节编码的字符串,一般encoding='utf-8'

web框架种类:

  • a,b,c
  • [第三方a],b,c -->(wsgiref)Django
  • [第三方a],b,[第三方c]

http请求知识

  • post和get的区别
    HTTP请求包格式


    image.png

    HTTP响应包格式


    image.png

    post和get的区别:
    • 共同点:都是HTTP中请求数据的方法
    • get请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连;
    • post把提交的数据则放置在HTTP包的包体中;
    • 所以,post方法比get方法相对安全些,但是post方法传输的数据在包体中以明文存在,存在一定的安全隐患,所以又有了HTTPS协议。
  • get 和 post是HTTP中请求数据的方法;application json 与form表单是HTTP中传输文件的类型,

  • 浏览器向服务器异步请求数据

    • 异步:异步,异嘛,不同的意思,这里也就是指不跟浏览器加载执行网页代码的步伐一致,也就是说在一个网页中需要用户操作来触发执行代码,而不是整个网页代码一次性执行完毕。(这里的用户操作是指在同一个网页下面请求代码执行渲染,而不是让浏览器直接跳转渲染另一个页面)
    • XMLHttpRequest(也就是networks下的XHR):基于XML的HTTP请求。是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。自从浏览器提供有了XMLHTTPRequest这个接口之后,ajax操作就此诞生。
    • AJAX(Asynchronous JavaScript and XML,异步的JavaScript和XML):ajax就是基于浏览器提供的XMLHttpRequest对象来实现的。
    • XML(eXtensible Markup Language,可扩展标记语言):在浏览器中使用XMLHTTPRequest对象在服务器之间通信,传输的数据是使用XML的方式,但最终还是会被转换成json数据格式来被我们使用。

二、创建项目及项目配置

创建项目

  • manage管理工具的使用

  • Pycharm社区版创建Django项目教程

    pip install django
    django-admin startproject mysite
    cd mysite
    python manage.py runserver
    
  • 处理用户请求实现代码

     from django.shortcuts import HttpResponse,render,redirect
     def login(request):
         """
         处理用户请求,并返回内容
         :param request:用户请求相关的所用信息(对象)
         :return:
         """
         # 字符串
         return HttpResponse('<input type="text" />')
         return HttpResponse('login.html')
         if request.method == 'GET':
             # 返回网页
             return render(request,'login.html',{msg:'123123'}) #前端页面的{{msg}}处显示页面传递过去的值
         else:
             #用户POST提交数据(请求体),标签属性method=POST
             u=request.POST.get('user') # 若key正确则返回值,否则返回none
             p=request.POST.get('pwd')
             if u=='root' and p=='123123':
                 # 登录成功
                 return redirect('https:www.baidu.com')
             else:
                 return render(request,'login.html')
    

文件目录结构

  • 文件目录结构


    Django-mulu.png
  • 前端页面默认路径:


    Django-templates.png

项目基本配置

  • 时区

    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
    
  • 数据库连接——MySQL

    DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'bishe',
          'USER': "root",
          'PASSWORD': "123456",
          'HOST': "localhost",
      }
    }
    

三、数据库

数据库迁移

  • 数据库迁移

    python manage.py migrate
    python manage.py makemigrations
    python manage.py
    
    # 只对某个APP数据迁移
    python manage.py makemigrations <appname>
    
    python manage.py migrate <appname>
    

    完成某个工程下特定的apps的数据迁移,一定要注意Django不会自动注册新创建的APP,所以一定要自己在项目的配置文件setting.pyINSTALLED_APPS中完成APP的注册

    • migrate,负责对INSTALLED_APPS中的应用程序迁移。
    • makemigrations, 负责基于你的模型修改创建一个新的迁移
    • sqlmigrate, 展示迁移的sql语句
    • showmigrations,其中列出了项目的迁移及其状态。

数据库迁移会遇到的问题

数据库类别

sqlite

数据库操作

四、auth用户认证模块

五、admin后台管理系统

  1. 访问:/admin
  2. 创建超级管理员的账号和密码
python manage.py createsuperuser

六、前端有关问题

七、插件使用

前端插件

八、前后端数据交互

json数据

json.dumps() : 将Python的字典结构导出到json使用;
json.loads() : 将json读成Python的字典结构;
json.dump()json.load(): 不是针对字符串的,而是针对文件的;
Python JSON:编码(转储),解码(加载)json数据和文件(示例)

不是JSON可序列化的(is not JSON serializable)

  • 原因分析:
    • simplejson和json不能很好地与django对象一起使用。
    • Django的内置序列化程序只能序列化充满django对象的查询集,但不能包含混合的不同类型的迭代对象,比如在一个列表中有AttractionHotel两个类型的对象
      • 解决办法:给model中定义的类提供一个序列化(编码、转储的方法)http://www.voidcn.com/article/p-oadxzxnv-byw.html

        • 转储将像其他所有JSON可序列化对象一样,以递归方式调用序列化方法.也就是说,obj.parent也会被序列化,而不需要你做任何进一步的操作.

          class MyObject:
              #    ...
              #    MyObject has 3 properties: name (a string), number (an int), and parent (a MyObject)
              @staticmethod
              def serialize(obj):
                  return {
                      "name":   obj.name,
                      "number": obj.number,
                      "parent": obj.parent
                  }
          
              #    ...
          
          simplejson.dumps(myObjInstance, default=MyObject.serialize)
          
        • 如果您只想将实例变量名称映射到它们各自的值,则可以使用一些内置的Python魔术.无论何时想要序列化更复杂的对象(同样,只使用1-1变量值映射),只需调用以下行:

          simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)
          

序列化

九、常见报错

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容