写法:url(r'^login/v2/', views.login,name='xx'), 视图中反向解析: from django.urls import reverse def login(request): print(reverse('xx')) #/login/v2/ if request.method == 'GET': return render(request,'login.html') else: uname = request.POST.get('uname') pwd = request.POST.get('pwd') if uname == 'chao' and pwd == '123': return HttpResponse('ok') else: return redirect(reverse('xx')) #使用反向解析 html模板渲染时反向解析的语法{% url 别名 %} <form action="{% url 'xx' %}" method="post"> {% csrf_token %} 用户名:<input type="text" name="uname"> 密码:<input type="text" name="pwd"> <input type="submit"> </form>
1 项目文件夹下的urls.py文件中写上如下内容 from django.conf.urls import url,include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls',namespace='app01')), # url(r'^app02/', include('app02.urls',namespace='app02')), #http://127.0.0.1:8000/index/ ] 2 在各个app应用文件夹下面建立urls.py文件 在urls.py文件中写本身应用的各个路径,好比app01 和 app02 app01: from django.conf.urls import url, include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^index/', views.index,name='index'), ] app02: from django.conf.urls import url, include from django.contrib import admin from app02 import views urlpatterns = [ url(r'^index/', views.index,name='index'), ]
写法:url(r'^app01/', include('app01.urls',namespace='app01')), 将每一个应用本身的url路径划分一个空间,未来经过别名反向解析时,经过空间名称能够找到对应应用下面的路径 使用: views.py文件中写法 from django.urls import reverse def index(request): print('app01反向解析:', reverse('app01:index')) # app01反向解析: /app02/index/ return HttpResponse('app01-index') html中写法: {% url 'app01:login' %}
object relational mapping 对象关系映射html
使用:python
第一步: 在应用文件夹下面的models.py文件中写对应的类,看下面的示例:mysql
class UserInfo(models.Model): id = models.AutoField(primary_key=True) username = models.CharField(max_length=10) password = models.CharField(max_length=32)
第二步:作数据库配置,settings.py文件中写上如下配置sql
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } 链接mysql的配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'orm01', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123' } }
第三步: 在项目文件夹下的的init文件中写上如下内容,来指定pymysql做为链接客户端数据库
import pymysql pymysql.install_as_MySQLdb()
第四步: 执行数据库同步指令,在终端中执行django
python3.6 manage.py makemigrations #在migrations文件夹下面生成记录文件 python3.6 manage.py migrate #执行记录文件
表就建立好了,咱们的表名就是: 应用名_类名小写app
建立: 方式一: obj=models.book_list( book_name='潘金莲后传' publisher='河南出版社' ) obj.save() 方式二: models.book_list.object.create( book_name='潘金莲后传' publisher='河南出版社' )
方式一: models.book_list.object.filter(id=1).update( book_name='潘金莲后传2' publisher='河南出版社1' ) 方式二: obj=models.book_list.objects.filter(id=1)[0] obj.book_name='潘金莲后传2' obj. publisher='河南出版社1' obj.save() 批量建立: list_obj = [] for i in range(10): obj = models.book( book_name = 'xx%s'%i, publisger = '北京%s'%i) models.book.objects.bulk_create(list_obj) update_or_create 有就更新,没有就建立 a,b = models.book.objects.update_or_create( obj.book_name='潘金莲后传2' obj. publisher='河南出版社1' ) print(a) # 当前更新后的model对象,或者是你新增的记录的model对象 print(b) # 新增就是True,查询就False
简单查询: ret=models.book.objects.filter(id=1) 就是查询到id为1 的数据 获得一个对象列表 obj=ret[0] 就是获得一个列表 获得列表里的属性就可使用万能的点 例如: obj.name obj.price
.all() jiushi 获得全部的数据 #filter和get # ret = models.UserInfo.objects.get(age=18) # ret = models.UserInfo.objects.filter(age=180) # get两个报错,可是get请求返回的结果就是那个model对象 # 1 UserInfo matching query does not exist. 啥也没查到 # 2 get() returned more than one UserInfo -- it returned 11! 结果多了,不行! # fitler不会报错 返回结果是一个queryset类型的集合,里面是一个一个的model对象 注意: .filter() 就是根据条件进行筛选 从而得到数据 .exclude() 就是排除知足条件的数据 从而获得剩下的数据 能够和.all().exclude() .filter.exclude() 使用 .order_by('属性') models.Book.objects.all().order_by('price')根据属性的升序排列 若是想降序就在属性的前面添加一个'-'号 好比:'-price' .count() 统计数据库中对象的数量 ret = models.book.objects.all().count() .exists() 检验该数据是否在数据库中 .valuse() 调用指定的属性值 models.book.objects.values('price','name') .values_list(*field): 它与values()很是类似,它返回的是一个元组序列,values返回的是一个字典序列 <13> distinct(): values和values_list获得的queryset类型的数据来调用,从返回结果中剔除重复纪录 ret = models.UserInfo.objects.all().values('age','username').distinct() ret = models.UserInfo.objects.values('age','username').distinct()
models.Book.objects.create( # publish_date = "2019-08-01", 字符串 # publish_date = datetime.datetime.now(), 时间日期数据 )