一、安装
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)
外键