运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

django 基础篇

运维开发网 https://www.qedev.com 2020-03-07 12:13 出处:网络 作者:运维开发网整理
伪静态:  伪静态可以理解为,假装出我们输入的的网站是一个静态的网站可以被浏览录入,我们自己写入的

伪静态:

 伪静态可以理解为,假装出我们输入的的网站是一个静态的网站可以被浏览录入,我们自己写入的

以问号结尾携带数据被认为是动态的ip地址,不会被录入到浏览器器中的。

以博客园为例:

https://www.cnblogs.com/linhaifeng/articles/7133167.html 

这要做的可以做到美观,并且可以被浏览器录入进去。

 

路由分发系统

   路由分发系统就是以url 与处理业务逻辑的函数形成一个对应关系,通过url找到对应的函数,完成业务逻辑处理。例:

 url(r‘^teachers/‘, teachers),

 

def teachers(request):
    c1 = request.COOKIES
    if not c1:
        return redirect(‘/login/‘)
    sql = ‘select teachers.id as tid,teachers.name as tname,classes.id as cid,classes.name as cname from teachers left join teachertoclass on teachers.id = teachertoclass.techer_id left join classes on classes.id = teachertoclass.class_id;‘
    tea = py.my_pymysql()
    teachers = tea.get_all(sql)
    dic = {}
    for teacher in teachers:
        tid = teacher[‘tid‘]
        if tid in dic:
            dic[tid][‘cname‘].append(teacher[‘cname‘])
        else:
            dic[tid] = {‘tid‘:tid,‘tname‘:teacher[‘tname‘],‘cname‘:[teacher[‘cname‘],]}

    sql1 = ‘select * from classes;‘
    cla = py.my_pymysql()
    classes = cla.get_all(sql1)
    return render(request,‘teachers.html‘,{‘teachers‘:dic.values(),‘classes‘:classes})

路由系统下的正则方法:

在正则表达式中结尾是以$结尾的,因为在url中是使用到正则来匹配输入的url来进行路由分发的所以url后面的/不作为结束符号,在后面还是可以继续

添加的,而使用$进行结尾以后就不可以在添加了,加了就找不到会出现404页面。

    url(r‘^test2/$‘, test2)

当我们没有给出正确的url地址时,就会爆出404页面,但是这个页面也会暴露出,我们的一些url信息,这里我们就要自己去创建一个404页面,需要注意的是这里我们要仈他写在最下方,不然就算我们给出了正确的url地址,也会先走定制的404页面。

url(r‘^‘, notfound)

反向路由的实现:

当我们后台设定的url地址发生改变时,前台如果不知道的话,页面将无法被打开,我们可以在后台的url设置一个name属性,而在前台我们的form

输入的action写入我们给对应的url设置的name属性的值,这样不管后台怎么改变url地址只要name属性值不变就可以访问到这个urldi地址

 

后台url:
    url(r‘^logindjsajdbjsabdsabdbsabdhsabdhbsahbdsaasa/$‘, login, name=‘xxx‘)
前台:    
    <form action="{% url ‘xxx‘ %}">
        <input type="text">
    </form>

app概念:

在jango中,app是作为orm路由分组和业务逻辑处理的承载体,他其中包含models 文件,__init__配置文件,url路由,views业务逻辑管理等等。

创建app 1 在下方Terminal 输入:

python3 manage.py startapp 自定义app名称

2  在setting中配置app 并配置orm连接数据库

DATABASES = {
    # ‘default‘: {
    #     ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
    #     ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
    # }
‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘db4‘,    ## 数据库名称
        ‘USER‘: ‘root‘,
        ‘PASSWORD‘: ‘123‘,    ## 安装 mysql 数据库时,输入的 root 用户的密码
        ‘HOST‘: ‘127.0.0.1‘,
    }
}

注册app:

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘,
    ‘app02‘,
    ‘app03‘,
]

orm中是默认使用mysqldb来导入msql的,而在python3中不是使用mysqldb的,所以要在app下的__init__中将mysqldb改为pymysql

import pymysql
 pymysql.install_as_MySQLdb()

在jangoorm中我们不可以直接使用原有的数据库来操作表格数据,我们要新建数据库中的表格来重新操作数据。

连接mysql数据库后,在app 下的models 创建表:

class classes(models.Model):
    name = models.CharField(max_length=32)

在Terminal输入创建表的两句经典:

python3  manage.py makemigrations
                    
python3 manage.py migrate

单表的增删改查:

  增:

def adds(request):
    models.classes.objects.create(name=‘python8期‘)
    models.classes.objects.create(name=‘python9期‘)
    models.classes.objects.create(name=‘python10期‘)
    models.classes.objects.create(name=‘python11期‘)
    return HttpResponse(‘ok‘)

删:

  

def del_class(request):
    class_id = request.GET.get(‘id‘)
    print(class_id)
    if class_id:
        models.classes.objects.filter(id=class_id).delete()
        return redirect(‘/app01/classes/‘)

改:

 

def update_class(request):
    if request.method == ‘GET‘:
        class_id = request.GET.get(‘id‘)
        print(class_id)
        sql = ‘delete from classes where id = %s‘
        classes = py.my_pymysql()
        res = classes.get_one(sql, class_id)
        return render(request, ‘update_class.html‘, {‘classesid‘: res[‘id‘], ‘classname‘: res[‘name‘]})
    else:
        id = request.POST.get(‘class_id‘)
        print(id)
        classname = request.POST.get(‘classname‘)

        sql = ‘update classes set name = %s where id = %s‘
        classes = py.my_pymysql()
        classes.update(sql, classname, id)
        return redirect(‘/classes/‘)

 

查:

 

def classes(request):
    # c1 = request.COOKIES
    # if not c1:
    #     return redirect(‘/login/‘)
    classes = models.classes.objects.all()
    return render(request, ‘classes.html‘, locals())

 

 

一对多表格操作:

增:

def test(request):
    models.students.objects.create(sname=‘阿花‘,ud_id=5)
    models.students.objects.create(sname=‘阿春‘,ud_id=4)
    models.students.objects.create(sname=‘阿纯‘,ud_id=4)
    models.students.objects.create(sname=‘阿香‘,ud_id=3)
    models.students.objects.create(sname=‘春花‘,ud_id=3)
    return HttpResponse(‘ok‘)

删:

def del_student(request):
    id = request.GET.get(‘id‘)
    models.students.objects.filter(id=id).delete()
    return redirect(‘/app02/students/‘)

改:

def m_up_student(request):
    res = {‘code‘: None, ‘data‘: None}
    student_id = request.POST.get(‘student_id‘)
    studentname = request.POST.get(‘studentname‘)
    class_id = request.POST.get(‘class_id‘)
    print(student_id, studentname, class_id)
    if student_id and studentname and class_id:
        models.students.objects.filter(id=student_id).update(ud_id=class_id)
        res[‘code‘] = 1000
        print(res)
        return JsonResponse(res)
    else:
        res["code"] = 998
        res[‘data‘] = ‘输入不能有空值‘
        return JsonResponse(res)

查:

def students(request):
    # c1 = request.COOKIES
    # if not c1:
    #     return redirect(‘/login/‘)
    classes = models.students.objects.all()
    # < QuerySet[ < students: students object >, < students: students object >, < students: students object >, < students: students
    # object >] >
    dic = {}
    for row in classes:
        tid = row.id
        dic[tid] ={"id":row.id,"sname":row.sname,"cid":row.ud_id,"cname":row.ud.name}
    return render(request, ‘students.html‘, {‘students‘: dic.values()},)

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消