一.Django基本   程序编写

a. url.py        /index/    ->   func

b. views.py

def func(request):     # 包含所有的请求数据

...

return HttpResponse('字符串')

return render(request, 'index.html', {'替换':替换})

retrun redirect('URL')

c. 模板语言

return render(request, 'index.html', {'li': [11,22,33]})

{% for item in li %}

<h1>{{item}}</h1>

{% endfor %}

***********  索引用点 **********

<h2> {{item.0 }} </h2>

二 视图函数   views.py

  1、获取用户请求数据
    request.GET
    request.POST
    request.FILES  获取文件
      PS:
     GET:获取数据   刷新的时候都是get    
     POST:提交数据
   
 2、checkbox、radio等多选的内容
    request.POST.getlist()
 3、上传文件
  # 上传文件,form标签做特殊设置  <form action="/login/" method="POST" enctype="multipart/form-data">
    obj = request.FILES.get('fafafa')
    f = open(obj.name, mode='wb')
    for item in obj.chunks():
       f.write(item)
    f.close()

示例:

多选框html示例

 <body>
     <form action="/login/" method="POST" enctype="multipart/form-data">
         <p>
             <input type="text" name="user" placeholder="用户名" />
         </p>
         <p>
             <input type="password" name="pwd" placeholder="密码" />
         </p>
         <p>
             男:<input type="radio"  name="gender" value="1"/>单选
             女:<input type="radio" name="gender" value="2"/>
             张扬:<input type="radio" name="gender" value="3"/>
         </p>
         <p>
             男:<input type="checkbox"  name="favor" value="11"/>多选
             女:<input type="checkbox" name="favor" value="22"/>
             张扬:<input type="checkbox" name="favor" value="33"/>
         </p>
         <p>
             <select name="city" multiple>   多选
                 <option value="sh">上海</option>
                 <option value="bj">北京</option>
                 <option value="tj">天津</option>
             </select>
         </p>
         <p>
             <input type="file" name="fafafa"/>
         </p>

         <input type="submit" value="提交"/>
     </form>
 </body>

  数据获取方式:获取多个用getlist;上传文件

 def login(request):
     if request.method == "GET":
         return render(request, 'login.html')
     elif request.method == "POST":
         # radio   获取单个value
         # v = request.POST.get('gender')
         # print(v)
         #checkbox多选  获取多个value
         # v = request.POST.getlist('favor')
         # print(v)
         # v = request.POST.get('fafafa')
         # print(v)
         #获取文件
         obj = request.FILES.get('fafafa')  #'fafafa'是html中的name
         print(obj,type(obj),obj.name)
         import os
         file_path = os.path.join('upload', obj.name)#指定文件存放目录
         f = open(file_path, mode="wb")
         for i in obj.chunks(): #chunks是method的一个函数,它存放上传的文件,可以从它里边取数据
             f.write(i)
         f.close()

         from django.core.files.uploadedfile import InMemoryUploadedFile
         return render(request, 'login.html')
     else:
         # PUT,DELETE,HEAD,OPTION...
         return redirect('/index/')

三、Django两种模式  FBV  &  CBV   (function  Base view) & (class  Base view)
   两者的主要区别就是   urls.py  与views.py

urls.py


1 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^home/', views.home), #url直接指向函数 url(r'^home/', views.Home.as_view()), #url指向Home类,这是固定写法
    url(r'^detail-(\d+)-(\d+).html', views.detail),#动态url,利用正则匹配一类url,html格式如:detail-1-2.html ]

views.py

 # def home(request):  #FBV
 #       if request.method == 'get':
 #           return HttpResponse('Home')
 #       if request.method == 'post':
 #           return HttpResponse('Home')

 from django.views import View  #CBV  必须要有这个,必须导入父类View
 class Home(View):
     # dispatch相当于助理,自动将请求分配给不同的函数来处理
     def dispatch(self, request, *args, **kwargs):  #继承的View父类中有dispatch方法,这里重写这个方法,请求最先到这个函数
         print('before')#增加新的功能print
         # 调用父类中的dispatch,反射,根据请求中的字符串,来使用不同的函数来处理请求
         result = super(Home,self).dispatch(request, *args, **kwargs)
         print('after')
         return result  #这里必须返回result

     def get(self,request):   #如果是get请求,自动执行get函数
         print(request.method)
         return render(request, 'home.html')

     def post(self,request): #如果是post请求,自动执行post函数
         print(request.method,'POST')
         return render(request, 'home.html')

四、Django模板语言循环字典

 {% for key,value in user_dict.items %}
     {{key}}--{{value}}
 {%  endfor %}

 注意,模板语言里key  value items都没有括号,这里user_dict是字典

五、路由系统url匹配的三种方式

  1.匹配一类url,并将url中的参数赋给相应变量(正则)

  urls.py

 url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),

 对于接收到并匹配的url:xxx/detail-3-6.html,会将第一个3赋给nid(因为nid在第一个),6赋给uid,并以(nid=3,uid=6)这样的形式传给views.py

views.py

 def detail(request, nid,uid):
        print(nid,uid)
        return render(request, 'user_detail.html', {'obj': obj})

 不论nid和uid这俩变量的位置怎样变化,从urls.py接收到的数据永远是nid=3,uid=6
优化:
def detail(request, *args,**kwargs): #不论url中有多少参数,形如url(r'^detail-(\d+).html', views.detail)这样的url,
会将参数传递给*args;形如url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)这样的url会将参数传递给**kwargs,
    **kwargs只接收字典参数(nid=3,uid=6)
  print(args)  获取单个参数,这里是获取到一个元组(1,2,3,4)
  print(kwargs)获取到字典参数 {'nid':3,'uid':9}
  nid = kwargs['nid']  #获取字典参数
  uid = kwargs['uid']

  2.一 一对应:

 url(r'^index/', views.index),  #FBV
  url(r'^home/', views.Home.as_view()), #CBV

  3.匹配一类url(正则)

 url(r'^detail-(\d+).html', views.detail),

六、Django对应的路由名称,生成自定义url
  由于业务需要,可能经常要更改url,导致html中的action也要做出相应改变,应用name属性后,就不用这么麻烦了 

name对URL路由关系进行命名, ***** 以后可以根据name生成自己想要的URL *****
  有以下三种命名方式:
  url(r'^asdfasdfasdf/', views.index, name='i1'),
  url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
  url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
  
  生成自定义url的两种方式:
  第一种,可以通过views.py函数生成
  通过views.py中的函数来生成相应url
  def func(request, *args, **kwargs):
   from django.urls import reverse#需要导入reverse这个模块,通过name反解url
   
   url1 = reverse('i1')                              # asdfasdfasdf/
   url2 = reverse('i2', args=(1,2,))                 # 生成yug/1/2/  reverse模块只能获取到/前边的内容,
                                                                             后边的只能加自定义参数
   url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
  
  第二种,通过模板语言来生成
  xxx.html
   <form action="{ % url 'i1' % }" method="post">  #实际用法
   {% url "i1" %}               # asdfasdfasdf/
   {% url "i2" 1 2 %}           # yug/1/2/
   {% url "i3" pid=1 nid=9 %}   # buy/1/9/
  
  注:
   # 获取当前的URL用
   request.path_info

七、路由分发,在project的urls.py中指定app的urls

#project  urls.py

 #project  urls.py

 from django.conf.urls import url,include  #需要include模块
 from django.contrib import admin

 urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^cmdb/', include("app01.urls")),  #指定app路由
     url(r'^monitor/', include("app02.urls")),
 ]

#app1 urls.py

 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
 ]

  #app1 urls.py

 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
 ]

八、Django创建表,使用mysql
  1.setting.py

 DATABASES = {
     'default': {
     'ENGINE': 'django.db.backends.mysql',
     'NAME':'dbname',
     'USER': 'root',
     'PASSWORD': 'xxx',
     'HOST': '',
     'PORT': '',
     }
 }

  2.创建数据库表步骤

 a. 先写类,在app下的modules中
         from django.db import models

         # app01_userinfo :   在数据库中生成的表名
         class UserInfo(models.Model):
             # id列,自增,主键
             # 用户名列,字符串类型,指定长度
             username = models.CharField(max_length=32)
             password = models.CharField(max_length=64)

     b. 注册APP

         INSTALLED_APPS = [
             'django.contrib.admin',
             'django.contrib.auth',
             'django.contrib.contenttypes',
             'django.contrib.sessions',
             'django.contrib.messages',
             'django.contrib.staticfiles',
             'app01',
         ]
     c. 执行命令
         python manage.py  makemigrations
         python manage.py  migrate

     d. ********** 注意 ***********
         Django默认使用MySQLdb模块链接MySQL,由于只有pymyql支持python3,所以要修改为使用pymysql:在project同名文件夹下的__init__文件中添加如下代码即可:
             import pymysql   #注意要用最新版本,0.7版
             pymysql.install_as_MySQLdb()

     e. 根据类自动创建数据库表
         # app下的models.py

         python manage.py  makemigrations
         python manage.py  migrate

九.Django增删改查
    在app的views.py中创建一个orm函数,这些语句也可以直接在其他函数中使用,只需要models模块即可

 from app01 import models
 def orm(request):
     # 创建,推荐用1和2两种建表方式

     models.UserInfo.objects.create(username=')

     dic = {'}
     models.UserInfo.objects.create(**dic)

     # obj = models.UserInfo(username='alex',password='123')
     # obj.save()

     # 查
     result = models.UserInfo.objects.all()  查询全部
     result = models.UserInfo.objects.filter(username=')  条件查询,相当于where
    models.User.objects.filter(id=1,name='root')#相当于and查询
     models.User.objects.filter(id__lt=1)  #条件查询,id < 1
    models.User.objects.filter(id__gte=1) #条件查询,id > 1
     models.User.objects.filter(id__gte=1) #条件查询,id >= 1
     models.User.objects.filter(id__lte=1) #条件查询,id <= 1
     dic = {'name': 'xx', 'age__gt': 19} #以字典形式查询
     models.User.objects.filter(**dic)
# # Django 查询到的结果是QuerySet ,它是一个列表[] # [obj(id,username,password),obj(id,username,password), obj(id,username,password)] for row in result: print(row.id,row.username,row.password) print(result) # 删除 models.UserInfo.objects.filter(username="alex").delete() # 更新 models.UserInfo.objects.filter(id=3).update(password=")  #按条件更改  
    models.UserInfo.objects.all().update(password="69")  #更改全部password="69"的
    dic = {'name': 'xx', 'age': 19}
     models.User.objects.filter(id__gt=1).update(**dic) #以字典形式更改

十、基于orm实现用户登录审查,从页面实现增删改查
views.py

 from django.shortcuts import render,HttpResponse,redirect
 from app01 import models

 def login(request):
     models.UserGroup.objects.create(caption='DBA')

     if request.method == "GET":
         return render(request, 'login.html')
     elif request.method == "POST":
         u = request.POST.get('user')
         p = request.POST.get('pwd')
         obj = models.UserInfo.objects.filter(username=u, password=p).first()
         if obj:  #如果能查询到数据,则为true
             return redirect('/cmdb/index/')
         else:
             return render(request, 'login.html')
     else:
         # PUT,DELETE,HEAD,OPTION...
         return redirect('/index/')

 def index(request):
     return render(request, 'index.html')

 def user_info(request):
     if request.method == "GET":  #获取用户与组
         user_list = models.UserInfo.objects.all()

         group_list = models.UserGroup.objects.all()

         return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})
     elif request.method == 'POST':  #增加用户
         u = request.POST.get('user')
         p = request.POST.get('pwd')
         models.UserInfo.objects.create(username=u,password=p)
         return redirect('/cmdb/user_info/')
         # user_list = models.UserInfo.objects.all()
         # return render(request, 'user_info.html', {'user_list': user_list})

 def user_detail(request, nid):#查询用户详细信息
     obj = models.UserInfo.objects.filter(id=nid).first()
     # 下面这句是取单条数据,如果不存在,直接报错
     # models.UserInfo.objects.get(id=nid)
     return render(request, 'user_detail.html', {'obj': obj})

 def user_del(request, nid):  #删除用户
     models.UserInfo.objects.filter(id=nid).delete()
     return redirect('/cmdb/user_info/')  #跳转回用户信息界面

 def user_edit(request, nid): #编辑页面
     if request.method == "GET":
         obj = models.UserInfo.objects.filter(id=nid).first()
         return render(request, 'user_edit.html',{'obj': obj})
     elif request.method == "POST":
         nid = request.POST.get('id')
         u = request.POST.get('username')
         p = request.POST.get('password')
         models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
         return redirect('/cmdb/user_info/')

html
登录

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
     <form action="/cmdb/login/" method="POST" enctype="multipart/form-data">
         <p>
             <input type="text" name="user" placeholder="用户名" />
         </p>
         <p>
             <input type="password" name="pwd" placeholder="密码" />
         </p>

         <input type="submit" value="提交"/>
     </form>
 </body>
 </html>

用户信息

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h3>添加用户</h3>
             <form method="POST" action="/cmdb/user_info/">
                 <input type="text" name="user" />
                 <input type="text" name="pwd" />

                 <select name="group_id">
                     {% for item in group_list %}
                         <option value="{{ item.uid }}">{{ item.caption }}</option>
                     {% endfor %}
                 </select>

                 <input type="submit" value="添加"/>
             </form>

             <h3>用户列表</h3>
             <ul>
                 {% for row in user_list %}
                     <li>
                         <a href="/cmdb/userdetail-{{ row.id }}/">{{ row.username }}</a> |
                         <span> {{ row.user_group.caption }} </span>
                         <a href="/cmdb/userdel-{{ row.id }}/">删除</a> |
                         <a href="/cmdb/useredit-{{ row.id }}/">编辑</a>
                     </li>
                 {% endfor %}
             </ul>

         </div>

     </div>

 </body>
 </html>

单个用户详细信息

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h1>用户详细信息</h1>

             <h5>{{ obj.id }}</h5>
             <h5>{{ obj.name }}</h5>
             <h5>{{ obj.password }}</h5>

         </div>

     </div>

 </body>
 </html>

用户编辑

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h1>编辑用户</h1>
             <form method="post" action="/cmdb/useredit-{{ obj.id }}/">
                 <input style="display: none" type="text" name="id" value="{{ obj.id }}" />
                 <input type="text" name="username" value="{{ obj.username }}" />
                 <input type="text" name="password" value="{{ obj.password }}"/>
                 <input type="submit" value="提交" />
             </form>

         </div>

     </div>

 </body>
 </html>

urls.py

 from django.conf.urls import url,include
 from django.contrib import admin
 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
     url(r'^user_info/', views.user_info),
     url(r'^userdetail-(?P<nid>\d+)/', views.user_detail),
     url(r'^userdel-(?P<nid>\d+)/', views.user_del),
     url(r'^useredit-(?P<nid>\d+)/', views.user_edit),
     url(r'^orm/', views.orm),
 ]

十一、Django建表更多字段,主要是给admin用的

1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制
23、models.ImageField   图片
24、models.FilePathField 文件

更多字段

创建 Django 用户:python manage.py createsuperuser

十二、建表的字段参数,即后边括号里的参数

caption = models.CharField(max_length=32,unique=True)
字段的参数:
            null               -> db是否可以为空
            default            -> 默认值
            primary_key        -> 主键
            db_column          -> 列名
            db_index           -> 索引
            unique               -> 唯一索引
            unique_for_date    ->
            unique_for_month
            unique_for_year
            auto_now           -> 创建时,自动生成时间
            auto_now_add       -> 更新时,自动更新为当前时间

                # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
                # obj = UserGroup.objects.filter(id=1).first()
                # obj.caption = "CEO"
                # obj.save()

            choices              -> django admin中显示下拉框,避免连表查询
            blank             -> django admin是否可以为空
            verbose_name      -> django admin显示字段中文
            editable          -> django admin是否可以被编辑
            error_messages    -> 错误信息欠  error_messages={"required": "密码不能为空",}
            help_text         -> django admin提示

示例:
class UserInfo(models.Model):
    # id列,自增,主键
    # 用户名列,字符串类型,指定长度
    # 字符串、数字、时间、二进制
    username = models.CharField(max_length=32,blank=True,verbose_name='用户名')
    password = models.CharField(max_length=60, help_text='pwd')
    email = models.CharField(max_length=60)
    test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码'})
    # user_group_id 数字
    user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptimew)
    user_type_choices = (  #这个不存在表里,是存在内存里,在admin界面会显示下拉框
        (1, '超级用户'),
        (2, '普通用户'),
        (3, '普普通用户'),
    )
    user_type_id = models.IntegerField(choices=user_type_choices,default=1)

十三、外键关联

会自动创建5列
class UserInfo(models.Model): # id列,自增,主键 # 用户名列,字符串类型,指定长度 # 字符串、数字、时间、二进制 username = models.CharField(max_length=32,blank=True,verbose_name='用户名') password = models.CharField(max_length=60, help_text='pwd') email = models.CharField(max_length=60) test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码', },)#注意逗号 # 创建user_group这一列时,Django自动将列名改为user_group_id ,这一列中就是存的user_group表中uid的数字 user_group = models.ForeignKey("UserGroup",to_field='uid') #user_group :要关联的表, “to_field:要关联的字段”, 还可以设置默认值:该默认值是指的user_group 中to_field的值

 注意:在创建的表中还存在user_group对象,只是不可见,通过循环,还可以取user_group表中所有的值

例:

 result = models.UserInfo.objects.all()
 for row in result:
     print(row)
     #此时row中包含userinfo表的所有字段,还包括user_group表的对象,即:
     [username,password,email,test,user_group_id,user_group对象]
     print(row.username)#打印表中的username字段
     print(user_group.uid)#打印user_group表中的uid字段,还可以打印它的其他字段(uid,catption,ctime,uptimew)

十四、一对多,利用外键增加用户,详见s19—-19视频

Django (2)的更多相关文章

  1. Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库

    一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...

  2. CentOS下 Django部署 nginx+uWSGI+Django(二)

    该篇内容承接CentOS下 Django部署 uWSGI+Django(一),细节流程可参考此篇内容. 1. 当前系统 CentOS Linux release 7.6.1810 Python 2.7 ...

  3. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  4. django(一)

    Django 自称是"最适合开发有限期的完美WEB框架".本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明, ...

  5. Django(四)

    一.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? 1.Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpResp ...

  6. Django(三)

    1.Django请求的生命周期         路由系统 -> 视图函数(获取模板+数据-->渲染) -> 字符串返回给用户   2.路由系统         /index/    ...

  7. Django(二)

    一.路由系统,URL    1.url(r'^index/', views.index),            url(r'^home/', views.Home.as_view()),    2. ...

  8. Python后台开发Django(数据库)

    如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s ...

  9. Python后台开发Django(启动)

    Django版本为:2.1.7 Python的web框架,MTV思想 MVC Model(模板文件,数据库操作)  view(视图模板文件  )controller(业务处理) MTV Model(模 ...

随机推荐

  1. Android 样式 (style) 和主题(theme)

    转载:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 样式和主题 样式是指为 View 或窗口指定外观和格式的属性集合.样式可以指定高度.填充.字 ...

  2. (转)gulp使用

    前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nod ...

  3. mui 下拉刷新

    mui 下拉刷新 此文提供的是mui这种下拉刷新.悬浮于页面上,比较好用. <!DOCTYPE html> <html> <head> <meta chars ...

  4. lightbox使用

    使用方法: 1.在页面头部包含 lightbox.js 文件并加载 lightbox.css 样式表文件 <script type="text/javascript" src ...

  5. C#并发编程

    并发编程,一直是小白变成(●—●)的一个坎.平时也用到过不少并发编程操作,在这里进行一下记录. 多线程并不是唯一 并发:同时做多件事情. 多线程:并发的一种形式,采用多线程来执行程序. 并行处理:把正 ...

  6. 【原创】自己动手写工具----XSmartNote [Beta 1.0]

    一.背景 有个朋友是在他们单位的市场部,手里的策划文案以及PPT,少则数百,多则上千,多年下来也是一笔不可小觑的财富,每一次新的策划都可以从以往的文案或PPT中“拿来主义”,有着很好的借鉴意义,但是这 ...

  7. python笔记1-转义字符

    print(r'dd"e"f')print(r'dd'e'f')print(r"dd"e"f")print(r"dd'e'f&qu ...

  8. RF Firefox Profile

    默认情况下,robot framework是启动不带任何配置信息的firefox,如果需要启动带有profile的话,增加一个参数即可,如 Open Browser https://aws-qa5.i ...

  9. Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)

    https://github.com/musicode/test/issues/5 Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open ...

  10. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...