python Django的基础知识 II

Django的基础知识 II

  • 路由系统URL
  • 视图
  • 模板
  • ORM操作
  • Django的基础知识 I 回顾

一,路由系统 URL

1,url or path

django 版本 2…

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),#指定具体值,不论顺序

django 版本 3…

from django.urls import path,re_path

1,path('home/',views.Home.as_view()),path('detail/',views.detail),
2,re_path('detail-(\d+).html',views.detail), #正则表达式匹配,导入 re_path模块
3,re_path('detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.detail),#指定具体值,不论顺序

PS:

def detail(request, nid,*args, **kwargs):
#nid,元组,键值对 按顺序进行形式输入和存放

2,实战:

a.re_path(‘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(‘detail-(?P\d+)-(?P\d+).html’,views.detail)

def func(reuqest,nid,uid):
    pass
def func(request,**kwargs):
    kwargs = {'nid':1,'uid':3}
def func(request,*args,**kwargs):
    args = (2,9)

3,name

对URL路由关系进行命名,以后可以根据此名称生成自己想要的URL
path('index/', views.index,name='index1'),
re_path('index/(\d+)', views.index,name='index2'),
re_path('detail-(?P<nid>\d+)-(?P<uid>\d+).html',views.index,name='index3')

def func(request,*args,**kwargs):
    from django.urls import reverse

    url1 = reverse('i1') #index/
    url2 = reverse('i2',args=(1,2,)) #index/1/2/
    url3 = reverse('i1',kwargs={'nid':1,'uid':9) #index/1/9

xxx.html

4,模板语言:

{% url "index1" %}      #index
{% url "index2" 1 2 %}      #index/1/2/
{% url "index3" nid=1 uid=9 %}      #index/1/9
注:
    # 当前的URL
    request.path_info

5,路由分发

from django.conf.urls import url,include
#再创建一个app02,分发url

urlpatterns = [
    path('cmdb/',include("app01.urls")),
    path('monitor/',include("app02.urls")),
]

cmdp --> app01urls
montior --> app02urls

6,默认值

7,命名空间

二,视图

1,获取用户请求数据

request.GET
request.POST
request.FILES
PS:
    GET:获取数据
    POST:提交数据

2,checkbox 等多选的内容

request.POST.getlist()
select  multiple

3,上传文件

obj = request.FILES.get('fafafa')
file_path = os.path.join('upload',obj.name)
f = open(file_path,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)

创建类
app01 userinfo

a.先写类

app01 下的models.py
class UserInfo(models.Model):
    #id列,自增,主键
    #用户名列,字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=16)

b.注册app

对于多个app,需要在settings 的
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',    #添加声明
]
中先行添加 app名称

c.执行命令

python manage.py makemigrations
python manage.py migrate

d.注意

Django 默认使用MySQLdb 模块链接MYSQL(python3 还没有该模块)
主动修改为 pymysql 在 project同名文件夹下的 __init__ 文件中添加如下代码
    import pymysql
    pymysql.install_as_MYSQLdb()

–根据类自动创建数据库表

app01 下的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.save()
choices         ->django admin 中显示下拉框,避免连表查询
blank           ->django admin 是否可以为空
verbose_name    ->django admin 显示字段中文
editable        ->django admin 是否可以被编辑
error_messages  ->错误信息
help_text       ->django admin 提示
validators      ->django form,自定义错误信息

–修改使用的数据库

a.对于需要修改 使用mysql(默认使用sqlite)

可以在settings 中的
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
修改为
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}

b.由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
如下设置放置的与project同名的配置的 init.py文件中

import pymysql
pymysql.install_as_MySQLdb() 

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

Django 基础知识 I 回顾

1,Django 请求生命周期

-> URL 对应关系(匹配)-> 视图函数 ->返回用户字符串
-> URL 对应关系(匹配)-> 视图函数 -> 打开一个html文件,读取内容

2,创建django project

django-admin startproject mysite
mysite
    mysite
        -配置文件
        -url.py
        -settings.py

cd mysite
python manage.py startapp cmdb
..
mysite
    mysite
        -配置文件
        -url.py
        -settings.py
    cmdb
        -views.py
        -admin.py
        -modles.py 创建数据库表

3,配置

模板路径
静态文件路径
注释 CSRF

4,编写程序

a. url.py
    /index/ -> func
b. views.py
    def func(request):
        #包含所有的请求数据
        ...
        return HttpResponse("字符串")
        return render(request,'index.html',{''})
        return redirect('url')
c. 模板语言
    return render(request,'index.html',{'li':[11,22,33]})

    {% for item in li %}
    <h1> {{ item }}
    {% endfor %}

5,索引 用 .

<h2>{{item.0}}<h2>

泡泡:

一般 GET 和 POST 的用法是
GET:获取数据
POST:提交数据
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值