zoukankan      html  css  js  c++  java
  • django 基础篇

    伪静态:

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

    以问号结尾携带数据被认为是动态的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()},)

         

  • 相关阅读:
    duilib布局
    C++中嵌入网页(duilib编辑框的实现)
    拖拽的实现
    调试URL(写文件)
    如何使用DataBinder.Eval()方法进行数据绑定
    GridVew,DataList,Repeater分页用户控件(第一版)
    关于何种情况下使用DataGrid、DataList或Repeater的一些讨论(转)
    使用PagedDataSource类实现DataList和Repeater控件的分页显示功能
    一个取得数据控件模板中输入框值的类
    在GridView中自定按钮,实现删除和更新
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11192055.html
Copyright © 2011-2022 走看看