伪静态:
伪静态可以理解为,假装出我们输入的的网站是一个静态的网站可以被浏览录入,我们自己写入的
以问号结尾携带数据被认为是动态的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()},)