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)

外键

   

原文地址:https://www.cnblogs.com/brownyangyang/p/9311171.html