zoukankan      html  css  js  c++  java
  • Python Django初入门

    一、安装

    pip3 install django -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    二、启动

    1.生成mysite工程目录

    django-admin startproject mysite  

    2.启动程序
    python3 manage.py runserver 127.0.0.1:8001

    3.通过web访问

    http://127.0.0.1:8001/    出现django主页面说明安装成功

    PS: mysite目录结构如下:

    mysite--->  db.sqlite3

                       manage.py     #管理Django程序

                                              #python manager.py

                                              #python manager.py startapp xx

                                              #python manager.py   migrate   

                                              #python manager.py   makemigrations                                 

                       mysite  (对程序进行配置  )

                                        __init__.py

                                        __pycache__

                                        settings.py        #配置文件

                                        urls.py               #URL对应关系

                                        wsgi.py             #一套接口,遵循WSGI规范

    三、创建app

    要在工程目录下创建 ,比如 上面提到的mysite

    python manager.py startapp cmdb

    python manager.py startapp openstack

    app目录:

       migrations    #数据操作记录

       admin.py      #Django为我们提供的后台管理

       apps.py        #配置当前app

       models.py    #ORM,写指定的类,通过命令可以创建数据库表

       tests.py        #测试

       views.py       #写业务代码        

    1.配置模板路径

    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join (BASE_DIR, 'templates')]
    ,
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]

    2.配置静态目录

    STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
    )

    四、总结

    1.Django请求生命周期

       -->URL对应关系(匹配)-->视图函数-->返回用户字符串

       -->URL对应关系(匹配)-->视图函数-->打开一个HTML文件,读取内容

    2.创建django project

       django-admin startproject mysite

       python manage.py startapp cmdb

    3.配置

       模板路径

       静态文件路径

       #CSRF

    4.编写程序

       a  url.py   /index  ->  func()

       b  views.py  

                def func(request):

                      #包含所有请求数据

                       return HttpResponse('字符串')

                       return render(request,'index.html',{'li':[11,22,33]})

                       return redirect('URL')

                       

       c  模板语言

            {% for item in li %}

                 <h1>{{item}}</h1>

            {% endfor %}

            ********************  索引用点 *****************

            <h2>{{itme.0}}</h2>

    Python工程四个点

    一、路由系统,URL 

     1.path('login/', views.login),

    2.path('home/', views.Home.as_view),

    3.re_path(r'^detail-(d+).html', views.detail),
     4.re_path(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail),
     PS:
    def detail(request,*args,**kwargs):
    pass

    实战
       a    re_path(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    re_path(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail),
    def func(request,nid,uid):
    pass
    def func(request,**kwargs):
    kwagrs = {'nid':1,'uid':3}
    def func(request,*args,**kwargs):
    args = (2,9)

    5.name
    对URL路由关系进行命名,以后可以根据此名称生成自己想要的URL
        url(r'^home/',views.index,name='i1'), 
        url(r'^index/(d+)/(d+)/',views.index,name='i2'), 
        url(r'^home/(?P<pid>d+)/(?P<nid>d+)/',views.index,name='i3'), 


    def func(request,*args,**kwagrs):
    from django.urls import reverse
    url1 = reverse('il') # home/
    url2 = reverse('i2',args=(1,2,)) # index/1/2
    url3 = reverse('i3',kwagrs={'pid':1,'nid':9}) # home/1/9


    xxx.html
    {% url "i1" %} # home/
            {% url "i2" 1 2 %}          #  index/1/2
            {% url "i3" pid=1 nid=2 %}  #  home/1/9 
     6.
    urlpatterns = [
    url('r^cmdb/,include("app01.urls"));
          url('r^cmdb/,include("app02.urls"));

    ]

    7.默认值
    8.命名空间


    模板语言:
    {% url "indexx" %}
         {% url "indexx" 2 %}   //2随便加,接收上面的(/d+)
    {{ request.path_info }} //当前URL

    二、视图

          1、获取用户请求数据

                request.GET   

                request.POST

                request.FILES

           2、checkbox,select多选的内容 

                request.POST.getlist()

           3、上传文件

                #上传文件,form标签做特殊设置

                obj = request.FILES.get('file_name')

                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操作

    1.根据类自动创建数据库表

    a.先写类

    from django.db import models
    # Create your models here.
    class UserInfo(models.Model):
    #隐含id列,自增,主键
    #用户名列,字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

    字段:
    字符串类型
    数字
    时间
    二进制
    自增(primary_key=True)
    字段的参数:
    null #db是否可以为空
    default #默认值
    primary_key #主键
    db_column #列名
    db_index #索引
    unique #唯一索引
    unique_for_data #截取日期做索引
    unique_for_month
    unique_for_year
    auto_now_add #创建时自动生成当前时间(models.DateTimeField(auto_now_add=True,null=True)
    auto_now #更新时,自动更新为当前时间
    #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是否为空,blank=True表示允许
    verbose_name #django admin中显示中文
    editable #django admin中是否可以被编辑
    error_messages #错误信息
    help_text #django admin的提示
    validators #django form 自定义错误信息

      

    b.注册app

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
    ]

    c.执行命令

       python3 manage.py  makemigrations

       python3 manage.py  migrate

    d.**********************注意**********************

        Django默认使用MySQLdb模块连接mysql,需要修改为pymysql,在project同名文件夹下的__ini__添加如下代码

        import pymysql

        pymysql.install_as_MYSQLdb()

    2.根据类对数据库表中的数据进行各种操作

        一对多:

               a.外键

               b.外键字段

               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

                     

    创建

    def orm(request):
    #法一
    #models.UserInfo.objects.create(username='root',password='123')

    #法二
    #obj = models.UserInfo(username='liyang',password='456')
    #obj.save()

    #法三
    dic = {'username':'xiaohong','password':'666'}
    models.UserInfo.objects.create(**dic)

    return HttpResponse('OK')

    查询

    #result = models.UserInfo.objects.all()
    #result = models.UserInfo.objects.filter(username='root')
    result = models.UserInfo.objects.filter (username='root',password='123') #逗号类似and效果
    for row in result:
    print(row.id,row.username,row.password)

     

    删除 

       models.UserInfo.objects.filter(id=3).delete()

    #models.UserInfo.objects.all().update(password=999)
    models.UserInfo.objects.filter(id=2).update (password=888)

    外键

       

  • 相关阅读:
    集群间如何实现session共享
    详解PHP如何实现单点登录
    jsonp原理详解
    跨站请求CSRF攻击
    防止SQL注入
    在springboot中使用h2数据库
    Datalab实验
    飞步无人驾驶2018届校园招聘在线笔试A轮
    HDU6030 Happy Necklace
    HDU5950 Recursive sequence
  • 原文地址:https://www.cnblogs.com/brownyangyang/p/9311171.html
Copyright © 2011-2022 走看看