伪静态:
伪静态可以理解为,假装出我们输入的的网站是一个静态的网站可以被浏览录入,我们自己写入的
以问号结尾携带数据被认为是动态的ip地址,不会被录入到浏览器器中的。
这要做的可以做到美观,并且可以被浏览器录入进去。
路由分发系统
路由分发系统就是以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()},)