一、Django请求生命周期
 
对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端
 
 
 
                                                                                                (完整的一个Django请求生命周期)
 
                                                                                            (Django的路由系统)
   -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
   -> URL对应关系(匹配) -> 视图函数 -> 打开一个HTML文件,读取内容
 
 
二、创建django projcet
 
django-admin startproject mysite  #开始项目
          ..
          mysite
               mysite
                    - 配置文件
                    - url.py
                    - settings.py
 
  cd mysite
  python manage.py startapp cmdb  #开始一个app
 
          mysite
               mysite
                    - 配置文件
                    - url.py
                    - settings.py
               cmdb
                    - views.py
                    - admin.py
                    - models.py # 创建数据库表
 
python3.5 manage.py runserver  #启动
 
 三、配置
 
模板路径   /templates/   记着加s
          
静态文件路径  /static/
         
# CSRF
 
四、编写程序
 
a. url.py
 
               /index/    ->   func

from cmdb import views
urlpatterns = [
url(r'^login/$', views.login),
url(r'^index/$', views.index),
url(r'^lists/$', views.lists),
url(r'^add/$', views.add),
]

b. views.py
 
def func(request):
                   
                    # 包含所有的请求数据
                    ...
                    return HttpResponse('字符串')
                    return render(request, 'index.html', {''})
                    retrun redirect('URL’)

def user_list(request,chose_id):
return HttpResponse(chose_id)
 
c. 模板语言
              
 return render(request, 'index.html', {'li': [11,22,33]})
 
               {% for item in li %}
                    <h1>{{item}}</h1>
               {% endfor %}%
     
 ***********  索引用点 **********
               <h2> {{item.0 }} </h2>
 
五、路由系统,URL
     
1、url(r'^index/', views.index),    
      url(r'^home/', views.Home.as_view()),
    
2、url(r'^detail-(\d+).html', views.detail),  
     
3、url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
 
        PS:
               def detail(request, *args,**kwargs):
                    pass
 
        实战:
               a.
                    url(r'^detail-(\d+)-(\d+).html', views.detail),
 
                    def func(request, nid, uid):
 
                         pass
 
                    def func(request, *args):
                         args = (2,9)
 
 
                    def func(request, *args, **kwargs):
                         args = (2,9)
 
               b.
                    url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
 
                    def func(request, nid, uid):
                         pass
 
                    def funct(request, **kwargs):
                         kwargs = {'nid': 1, 'uid': 3}
 
                    def func(request, *args, **kwargs):
                         args = (2,9)
 
 4、 name
 
          
对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****
 
          url(r'^asdfasdfasdf/', views.index, name='i1'),
          url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
          url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
          
            def func(request, *args, **kwargs):
                           from django.urls import reverse
                           url1 = reverse('i1')                              # asdfasdfasdf/
                           url2 = reverse('i2', args=(1,2,))                 # yug/1/2/
                           url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
 
         
 xxx.html
 
               {% url "i1" %}               # asdfasdfasdf/
               {% url "i2" 1 2 %}           # yug/1/2/
               {% url "i3" pid=1 nid=9 %}   # buy/1/9/
 
          
注:
               # 当前的URL
               request.path_info
 
5、多级路由
 
          project/urls.py
               from django.conf.urls import url,include
               from django.contrib import admin
 
               urlpatterns = [
                    url(r'^cmdb/', include("app01.urls")),
                    url(r'^monitor/', include("app02.urls")),
               ]
 
          app01/urls.py
               from django.conf.urls import url,include
               from django.contrib import admin
               from app01 import views
 
               urlpatterns = [
                    url(r'^login/', views.login),
               ]
 
          app02/urls.py
               from django.conf.urls import url,include
               from django.contrib import admin
               from app02 import views
 
               urlpatterns = [
                    url(r'^login/', views.login),
               ]
 
6、默认值(欠)
 
7、命名空间(欠)
 
 
六、视图
 
1、获取用户请求数据
          request.GET
          request.POST
          request.FILES
          PS:
               GET:获取数据                    
               POST:提交数据
 
2、checkbox等多选的内容
      request.POST.getlist()
     
 
3、上传文件
          # 上传文件,form标签做特殊设置
          obj = request.FILES.get('fafafa')
          obj.name
          f = open(obj.name, mode='wb')
          for item in obj.chunks():
               f.write(item)
          f.close()
 
     
4、FBV & CBV
        function base view
 
          url.py
               index -> 函数名
 
          view.py
               def 函数(request):
                    ...
          ====》
          /index/ -> 函数名
 
          /index/ -> 类
 
          ====》
 
          建议:两者都用
 
 5、装饰器
          欠
 
 
七、模板
 
 
 
八、ORM操作
     
select * from tb where id > 1     
# 对应关系     
models.tb.objects.filter(id__gt=1)     
models.tb.objects.filter(id=1)    
models.tb.objects.filter(id__lt=1)
 
实战连接数据库:        
a. 创建类,先写类
          from django.db import models
 
          # app01_userinfo
          class UserInfo(models.Model):
               # id列,自增,主键
               # 用户名列,字符串类型,指定长度
               username = models.CharField(max_length=32)
               password = models.CharField(max_length=64)
 
  b. 注册APP
 
          INSTALLED_APPS = [
               'django.contrib.admin',
               'django.contrib.auth',
               'django.contrib.contenttypes',
               'django.contrib.sessions',
               'django.contrib.messages',
               'django.contrib.staticfiles',
               'app01',
          ]
 
c. 执行命令
          python manage.py  makemigrations
          python manage.py  migrate
 
     
d. ********** 注意 ***********
          Django默认使用MySQLdb模块链接MySQL
          主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
               import pymysql
               pymysql.install_as_MySQLdb()
 
1). 根据类自动创建数据库表
          # app下的models.py
 
          python manage.py  makemigrations
          python manage.py  migrate
 
 
          字段:
               字符串类型
 
 
               数字
 
 
               时间
 
 
               二进制
 
               自增(primary_key=True)
 
          字段的参数:
               null               -> db是否可以为空
               default            -> 默认值
               primary_key        -> 主键
               db_column          -> 列名
               db_index           -> 索引
               unique                  -> 唯一索引
               unique_for_date    ->
               unique_for_month
               unique_for_year
               auto_now           -> 创建时,自动生成时间
               auto_now_add       -> 更新时,自动更新为当前时间
 
                    # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
                    # obj = UserGroup.objects.filter(id=1).first()
                    # obj.caption = "CEO"
                    # obj.save()
 
               choices                 -> django admin中显示下拉框,避免连表查询
               blank             -> django admin是否可以为空
               verbose_name      -> django admin显示字段中文
               editable          -> django admin是否可以被编辑
               error_messages    -> 错误信息欠
               help_text         -> django admin提示
               validators            -> django form ,自定义错误信息(欠)
               创建 Django 用户:python manage.py createsuperuser
     
2). 根据类对数据库表中的数据进行各种操作
 
          一对多:
 
               a. 外检
               b.
                    外键字段_id
               c.
                    models.tb.object.create(name='root', user_group_id=1)
               d.
                   userlist = models.tb.object.all()
                    for row in userlist:
                         row.id
                         row.user_group_id
                         row.user_group.caption
 
九、实例
详见Pycharm

Python的平凡之路(19)的更多相关文章

  1. Python的平凡之路(8)

    (本文是对平凡之路(7)的补充等) 一.动态导入模块 import importlib __import__('import_lib.metaclass') #这是解释器自己内部用的 #importl ...

  2. Python的平凡之路(20)

    (提问复习为主) 一.Django请求的生命周期      武彦涛:           路由系统 -> 视图函数(获取模板+数据=>渲染) -> 字符串返回给用户     二.路由 ...

  3. Python的平凡之路(13)

    一.Python的paramiko模块介绍 Python 的paramiko模块,该模块和SSH用于连接远程服务器并执行相关操作 SSH client 用于连接远程服务器并执行基本命令 基于用户名和密 ...

  4. Python的平凡之路(9)

    一.Paramiko模块练习 1. Paramiko模块介绍 Paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接   2 .SSHclie ...

  5. Python的平凡之路(6)

    一.面向对象编程介绍 1 编程范式:          编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式.随着编程方法学和软件工程研究的深入,特别是OO ...

  6. Python的平凡之路(5)

    一.模块介绍 定义: 模块--用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名test.py,模块名test) 包—用来从逻辑上组织 ...

  7. Python的平凡之路(18)

    一.JS 正则部分 test   - 判断字符串是否符合规定的正则rep = /\d+/;rep.test("asdfoiklfasdf89asdfasdf")# truerep ...

  8. Python的平凡之路(16)

    一.HTML+CSS补充 0.常用页面布局 <!DOCTYPE html> <html lang="en"><head> <meta ch ...

  9. Python的平凡之路(12)

    一.数据库介绍 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但 ...

随机推荐

  1. 【积累】发送验证码按钮倒计时js

    注册的时候要发送验证码,就上网研究了一下,写了一个简单点的... jsp页面: <input type="button" id="testbtn" val ...

  2. zabbix3.0.4 部署之七 (zabbix3.0.4 邮件报警) & 微信报警

    1 [root@sv-zabbix ~]# cat /usr/local/zabbix/share/zabbix/alertscripts/sendEmail.sh #!/bin/bash#SMTP_ ...

  3. PacBio三代全长转录组/Iso-Seq技术及案例分析

    参考:产品手册 PacBio三代全长转录组有什么优势? 近年来,随着高通量测序技术的发展,转录组测序已经成为研究基因表达调控的主要手段.但二代的转录本重构准确率很低,三代可以直接得到全长转录本,无需组 ...

  4. 【转】 C++模板详解

    C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 模板是一种对类型进行参数化的工具: 通常有 ...

  5. Git常用命令速查表

  6. DevExpress实现为TextEdit设置水印文字

    本文实例展示了DevExpress实现为TextEdit设置水印文字的方法,是一个很实用的技巧.分享给大家供大家参考. 转自 http://blog.csdn.net/yh0503/article/d ...

  7. 51nod1305 Pairwise Sum and Divide

    题目链接:51nod 1305 Pairwise Sum and Divide 看完题我想都没想就直接暴力做了,AC后突然就反应过来了... Floor( (a+b)/(a*b) )=Floor( ( ...

  8. 配置MAVEN出现错误:java_home not found in your enviroment

    配置好maven后检测是否配置成功出现错误:java_home not found in your enviroment 找问题: 1.cmd--> path  看路径是否正确 2.cmd--& ...

  9. js中Json 对象,Json字符串转换

    //tmppcd  是一个对象 //JSON.stringify()   是把对象转换成json 字符串

  10. tab切换-2016.6.4

    以前的tab切换,一般都是自己找网上的源代码,不知道含义,直接套,然后会有一些不知道的问题出现. 最近学习了jq(当然属于懒人的我,学习进度很慢),然后再工作中遇到了tab选项卡,所以决定自己写一个. ...