note

  1. 上节内容回顾:
  2. 1Django请求生命周期
  3. -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
  4. -> URL对应关系(匹配) -> 视图函数 -> 打开一个HTML文件,读取内容
  5. 2、创建django projcet
  6. django-admin startproject mysite
  7. ..
  8. mysite
  9. mysite
  10. - 配置文件
  11. - url.py
  12. - settings.py
  13.  
  14. cd mysite
  15. python manage.py startapp cmdb
  16. mysite
  17. mysite
  18. - 配置文件
  19. - urls.py
  20. - settings.py
  21. cmdb
  22. - views.py
  23. - admin.py
  24. - models.py # 创建数据库表
  25. 3、配置
  26. 模板路径
  27. 静态文件路径
  28. # CSRF
  29. 4、编写程序
  30. a. url.py
  31. /index/ -> func
  32. b. views.py
  33. def func(request):
  34. # 包含所有的请求数据
  35. ... ---业务处理
  36. return HttpResponse('字符串')
  37. return render(request, 'index.html', {''})
  38. retrun redirect('URL')
  39. c. 模板语言
  40. return render(request, 'index.html', {'li': [11,22,33]})
  41. {% for item in li %}
  42. <h1>{{item}}</h1>
  43. {% endfor %}
  44. *********** 索引用点 **********
  45. <h2> {{item.0 }} </h2>
  46. 一、路由系统,URL
  47. 1url(r'^index/', views.index),
  48. url(r'^home/', views.Home.as_view()),
  49. 2url(r'^detail-(\d+).html', views.detail),
  50. 3url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail) #推荐使用
  51. PS:
  52. def detail(request, *args,**kwargs):
  53. pass
  54. 实战:
  55. a.
  56. url(r'^detail-(\d+)-(\d+).html', views.detail),
  57. def func(request, nid, uid): #id是内置函数,不要用
  58. pass
  59. def func(request, *args):
  60. args = (2,9)
  61. def func(request, *args, **kwargs):
  62. args = (2,9)
  63. b.
  64. url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)
  65. def func(request, nid, uid):
  66. pass
  67. def funct(request, **kwargs):
  68. kwargs = {'nid': 1, 'uid': 3}
  69. def func(request, *args, **kwargs):
  70. kwargs = {'nid': 1, 'uid': 3}
  71. 4 name
  72. URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****
  73. urls
  74. url(r'^asdfasdfasdf/', views.index, name='i1'),
  75. url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
  76. url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
  77. views
  78. def func(request, *args, **kwargs):
  79. from django.urls import reverse
  80. url1 = reverse('i1') # asdfasdfasdf/
  81. url2 = reverse('i2', args=(1,2,)) # yug/1/2/
  82. url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
  83. xxx.html(在模板语言里)
  84. {% url "i1" %} # asdfasdfasdf/
  85. {% url "i2" 1 2 %} # yug/1/2/ #指定页面
  86. {% url "i3" pid=1 nid=9 %} # buy/1/9/
  87. 注:
  88. # 当前的URL
  89. request.path_info
  90. 5、多级路由
  91. project/urls.py
  92. from django.conf.urls import url,include
  93. from django.contrib import admin
  94. urlpatterns = [
  95. url(r'^cmdb/', include("app01.urls")),
  96. url(r'^monitor/', include("app02.urls")),
  97. ]
  98. app01/urls.py
  99. from django.conf.urls import url,include
  100. from django.contrib import admin
  101. from app01 import views
  102. urlpatterns = [
  103. url(r'^login/', views.login),
  104. ]
  105. app02/urls.py
  106. from django.conf.urls import url,include
  107. from django.contrib import admin
  108. from app02 import views
  109. urlpatterns = [
  110. url(r'^login/', views.login),
  111. ]
  112. 6、默认值(欠)
  113. 7、命名空间(欠)
  114. 二、视图
  115. 1、获取用户请求数据
  116. request.GET
  117. request.POST
  118. request.FILES
  119. PS:
  120. GET:获取数据
  121. POST:提交数据
  122. 2checkbox等多选的内容
  123. request.POST.getlist()
  124. 3、上传文件
  125. # 上传文件,form标签做特殊设置
  126. obj = request.FILES.get('fafafa')
  127. obj.name
  128. f = open(obj.name, mode='wb')
  129. for item in obj.chunks():
  130. f.write(item)
  131. f.close()
  132. 4FBV & CBVclass
  133. function base view
  134. url.py
  135. index -> 函数名
  136. view.py
  137. def 函数(request):
  138. ...
  139. ====》
  140. /index/ -> 函数名
  141. /index/ ->
  142. ====》
  143. 建议:两者都用
  144. 5、装饰器

  145. 三、模板
  146. 四、ORM操作
  147. 1db first 先登录数据库写sql语句创建表结构,工具(如python)连接后自动在本地生成类,
  148. 以后不用写sql语句,根据类就能操作数据库
  149. 2code first 先写代码(类),类再生成数据库表(主流都是code first sqlalchemyDjango等)
  150. select * from tb where id > 1
  151. # 对应关系
  152. models.tb.objects.filter(id__gt=1)
  153. models.tb.objects.filter(id=1)
  154. models.tb.objects.filter(id__lt=1)
  155. 创建类
  156. a. 先写类
  157. from django.db import models
  158. # app01_userinfo
  159. class UserInfo(models.Model):
  160. # id列,自增,主键
  161. # 用户名列,字符串类型,指定长度
  162. username = models.CharField(max_length=32)
  163. password = models.CharField(max_length=64)
  164. b. settings里注册APP
  165. INSTALLED_APPS = [
  166. 'django.contrib.admin',
  167. 'django.contrib.auth',
  168. 'django.contrib.contenttypes',
  169. 'django.contrib.sessions',
  170. 'django.contrib.messages',
  171. 'django.contrib.staticfiles',
  172. 'app01',
  173. ]
  174. c. 执行命令
  175. python manage.py makemigrations
  176. python manage.py migrate
  177. d. ********** 注意 ***********
  178. Django默认使用MySQLdb模块链接MySQL
  179. 主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
  180. import pymysql
  181. pymysql.install_as_MySQLdb()
  182. 1. 根据类自动创建数据库表
  183. # app下的models.py
  184. python manage.py makemigrations
  185. python manage.py migrate
  186. 字段:
  187. 字符串类型
  188. 数字
  189. 时间
  190. 二进制
  191. 自增(primary_key=True
  192. 字段的参数:
  193. null -> db是否可以为空
  194. default -> 默认值
  195. primary_key -> 主键
  196. db_column -> 列名
  197. db_index -> 索引
  198. unique -> 唯一索引
  199. unique_for_date ->
  200. unique_for_month
  201. unique_for_year
  202. auto_now -> 创建时,自动生成时间
  203. auto_now_add -> 更新时,自动更新为当前时间
  204. # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
  205. # obj = UserGroup.objects.filter(id=1).first()
  206. # obj.caption = "CEO"
  207. # obj.save()
  208. choices -> django admin中显示下拉框,避免连表查询(因为效率低)
  209. blank -> django admin是否可以为空
  210. verbose_name -> django admin显示字段中文
  211. editable -> django admin是否可以被编辑
  212. error_messages -> 错误信息欠
  213. help_text -> django admin提示
  214. validators -> django form ,自定义错误信息(欠)
  215. 创建 Django 用户:python manage.py createsuperuser
  216. 更多http://www.cnblogs.com/wupeiqi/articles/5246483.html
  217. 2. 根据类对数据库表中的数据进行各种操作
  218. 一对多:
  219. a. 外键
  220. b.
  221. 外键字段_id
  222. c.
  223. models.tb.object.create(name='root', user_group_id=1)
  224. d.
  225. userlist = models.tb.object.all()
  226. for row in userlist:
  227. row.id
  228. row.user_group_id
  229. row.user_group.caption #跨表操作
  230. =================== 作业:用户管理 ====================
  231. 1、用户组的增删改查
  232. 2、用户增删改查
  233. - 添加必须是模态对话框
  234. - 删除必须是模态对话框
  235. - 修改,必须显示默认值(可以用if-else判断)
  236. 3、比较好看的页面
  237. 4、预习:
  238. http://www.cnblogs.com/wupeiqi/articles/5246483.html

admin

  1. from django.contrib import admin
  2. from app01 import models
  3. # Register your models here.
  4. admin.site.register(models.UserInfo)
models

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. # app01_userinfo 默认生成的表名
  5. class UserGroup(models.Model):
  6. uid=models.AutoField(primary_key=True) #创建自增列
  7. caption=models.CharField(max_length=32)
  8. ctime=models.DateTimeField(auto_now_add=True,null=True) #Django自动创建这一列,不用自己写
  9. uptime=models.DateTimeField(auto_now=True,null=True)
  10. # obj=UserGroup.objects.filter(id=1).first().update(caption='CEO') #不生效
  11. # obj=UserGroup.objects.filter(id=1).first()
  12. # obj.caption='CEO'
  13. # obj.save()
  14. class UserInfo(models.Model): #必须继承models.Model
  15. # id列,自增,主键 --Django默认自动隐含创建
  16. # 用户名列,字符串类型,指定长度
  17. #字符串、数字、时间、二进制
  18. username = models.CharField(max_length=32,blank=True,verbose_name='用户名')
  19. password = models.CharField(max_length=64,help_text='pwd')
  20. email = models.EmailField(max_length=64,null=True)
  21. url = models.URLField(max_length=64,null=True)
  22.  
  23. #Django 生成时会加上id,user_group_id 数字
  24. user_group=models.ForeignKey("UserGroup",to_field="uid",default=1,on_delete=models.CASCADE) #to_field与哪个字段(主键)关联,默认也是主键
  25. #(uid,caption,ctime,uptime)
  26.  
  27. user_type_choices=(
  28. (1,'超级用户'),
  29. (2,'普通用户'),
  30. (3,'普普通用户'),
  31. )
  32. user_type_id=models.IntegerField(choices=user_type_choices,default=1)
urls

  1. """s14day19_2 URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4. https://docs.djangoproject.com/en/1.10/topics/http/urls/
  5. Examples:
  6. Function views
  7. 1. Add an import: from my_app import views
  8. 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
  9. Class-based views
  10. 1. Add an import: from other_app.views import Home
  11. 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
  12. Including another URLconf
  13. 1. Import the include() function: from django.conf.urls import url, include
  14. 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
  15. """
  16. from django.conf.urls import url,include
  17. from django.contrib import admin
  18. from app01 import views
  19. urlpatterns = [
  20. url(r'^login/', views.login),
  21. url(r'^index/', views.index),
  22. url(r'^user_info/', views.user_info),
  23. url(r'^userdetail-(?P<nid>\d+)/', views.user_detail),
  24. url(r'^userdel-(?P<nid>\d+)/', views.user_del),
  25. url(r'^useredit-(?P<nid>\d+)/', views.user_edit),
  26. url(r'^orm/', views.orm),
  27. ]
views.bak

  1. from django.shortcuts import render,HttpResponse,redirect
  2. # Create your views here.
  3. # for i in USER_DICT.items()
  4. # USER_DICT = {
  5. # '1': {'name': 'root1', 'email': 'root@live.com'},
  6. # '2': {'name': 'root2', 'email': 'root@live.com'},
  7. # '3': {'name': 'root3', 'email': 'root@live.com'},
  8. # '4': {'name': 'root4', 'email': 'root@live.com'},
  9. # '5': {'name': 'root5', 'email': 'root@live.com'},
  10. # }
  11. # USER_LIST = [
  12. # {'name': 'root'}
  13. # {'name': 'root'}
  14. # {'name': 'root'}
  15. # ]
  16. #
  17. # {% for item in user_list%}
  18. #
  19. # USER_DICT = {
  20. # 'k1': 'root1',
  21. # 'k2': 'root2',
  22. # 'k3': 'root3',
  23. # 'k4': 'root4',
  24. # }
  25. USER_DICT = {
  26. '': {'name': 'root1', 'email': 'root@live.com'},
  27. '': {'name': 'root2', 'email': 'root@live.com'},
  28. '': {'name': 'root3', 'email': 'root@live.com'},
  29. '': {'name': 'root4', 'email': 'root@live.com'},
  30. '': {'name': 'root5', 'email': 'root@live.com'},
  31. }
  32. def index(request,nid,uid):
  33. # indexx
  34. print(request.path_info)
  35. # /asdfasdfasdf/13/
  36. from django.urls import reverse
  37. # v = reverse('indexx',args=(90,88,))
  38. v = reverse('indexx',kwargs={"nid":1, 'uid': ''})
  39. print(v)
  40. return render(request, 'index.html', {'user_dict': USER_DICT})
  41. # def detail(request):
  42. # nid = request.GET.get('nid')
  43. # detail_info = USER_DICT[nid]
  44. # return render(request, 'detail.html', {'detail_info': detail_info})
  45.  
  46. # http://127.0.0.1:8000/detail-2-9.html
  47. def detail(request,nid):
  48. detail_info = USER_DICT[nid]
  49. return render(request, 'detail.html', {'detail_info': detail_info})
  50. """
  51. def login(request):
  52. if request.method == "GET":
  53. return render(request, 'login.html')
  54. elif request.method == "POST":
  55. u = request.POST.get('user')
  56. p = request.POST.get('pwd')
  57. if u == 'alex' and p == '123':
  58. return redirect('/index/')
  59. else:
  60. return render(request, 'login.html')
  61. else:
  62. # PUT,DELETE,HEAD,OPTION...
  63. return redirect('/index/')
  64. """
  65. def login(request):
  66. if request.method == "GET":
  67. return render(request, 'login.html')
  68. elif request.method == "POST":
  69. # radio
  70. # v = request.POST.get('gender')
  71. # print(v)
  72. # v = request.POST.getlist('favor')
  73. # print(v)
  74. # v = request.POST.get('fafafa')
  75. # print(v)
  76. obj = request.FILES.get('fafafa')
  77. print(obj,type(obj),obj.name)
  78. import os
  79. file_path = os.path.join('upload', obj.name)
  80. f = open(file_path, mode="wb")
  81. for i in obj.chunks():
  82. f.write(i)
  83. f.close()
  84. from django.core.files.uploadedfile import InMemoryUploadedFile
  85. return render(request, 'login.html')
  86. else:
  87. # PUT,DELETE,HEAD,OPTION...
  88. return redirect('/index/')
  89. # def home(request):
  90. # return HttpResponse('Home')
  91. from django.views import View
  92. class Home(View):
  93. def dispatch(self, request, *args, **kwargs):
  94. # 调用父类中的dispatch
  95. print('before')
  96. result = super(Home,self).dispatch(request, *args, **kwargs)
  97. print('after')
  98. return result
  99. def get(self,request):
  100. print(request.method)
  101. return render(request, 'home.html')
  102. def post(self,request):
  103. print(request.method,'POST')
  104. return render(request, 'home.html')
views

  1. from django.shortcuts import render,HttpResponse,redirect
  2. def login(request):
  3. models.UserGroup.objects.create(caption='DBA')
  4. if request.method == "GET":
  5. return render(request, 'login.html')
  6. elif request.method == "POST":
  7. # 数据库中执行 select * from user where usernam='x' and password='x'
  8. u = request.POST.get('user')
  9. p = request.POST.get('pwd')
  10. # obj = models.UserInfo.objects.filter(username=u,password=p).first()
  11. # print(obj)# obj None,无用户
  12. # count = models.UserInfo.objects.filter(username=u, password=p).count() #获取个数
  13. obj = models.UserInfo.objects.filter(username=u, password=p).first() #推荐使用
  14. if obj:
  15. return redirect('/cmdb/index/')
  16. else:
  17. return render(request, 'login.html')
  18. else:
  19. # PUT,DELETE,HEAD,OPTION...
  20. return redirect('/index/')
  21. def index(request):
  22. return render(request, 'index.html')
  23. def user_info(request):
  24. if request.method == "GET":
  25. user_list = models.UserInfo.objects.all()
  26. group_list=models.UserGroup.objects.all()
  27. # for row in user_list:
  28. # print(row.id)
  29. # print(row.user_group.uid)
  30. # print(row.user_group.caption)
  31. # print(user_list.query) #查看sql语句
  32. # QuerySet [obj(id,username,email,user_group_id,user_group(uid,caption...)),obj,]
  33. return render(request, 'user_info.html', {'user_list': user_list,"group_list":group_list})
  34. elif request.method == 'POST':
  35. u = request.POST.get('user')
  36. p = request.POST.get('pwd')
  37. models.UserInfo.objects.create(username=u,password=p)
  38. return redirect('/cmdb/user_info/')
  39. # user_list = models.UserInfo.objects.all()
  40. # return render(request, 'user_info.html', {'user_list': user_list})
  41. def user_detail(request, nid):
  42. obj = models.UserInfo.objects.filter(id=nid).first()
  43. # models.UserInfo.objects.get(id=nid) # 取单条数据,如果不存在,直接报错
  44. return render(request, 'user_detail.html', {'obj': obj})
  45. def user_del(request, nid):
  46. models.UserInfo.objects.filter(id=nid).delete()
  47. return redirect('/cmdb/user_info/')
  48. def user_edit(request, nid):
  49. if request.method == "GET":
  50. obj = models.UserInfo.objects.filter(id=nid).first()
  51. return render(request, 'user_edit.html',{'obj': obj})
  52. elif request.method == "POST":
  53. nid = request.POST.get('id')
  54. u = request.POST.get('username')
  55. p = request.POST.get('password')
  56. models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
  57. return redirect('/cmdb/user_info/')
  58. from app01 import models
  59. def orm(request):
  60. # 创建1(1)(推荐)
  61. # models.UserInfo.objects.create(username='root',password='123')
  62. # 创建1(2)
  63. # dic = {'username': 'eric', 'password': '666'}
  64. # models.UserInfo.objects.create(**dic)
  65. # 创建2
  66. # obj = models.UserInfo(username='alex',password='123')
  67. # obj.save()
  68. # 查
  69. # result = models.UserInfo.objects.all()
  70. # result = models.UserInfo.objects.filter(username='root',password='123') #相当于where
  71. #
  72. # result,QuerySet类型 => Django提供的 => [] 理解成列表
  73. # [obj(id,username,password),obj(id,username,password), obj(id,username,password)]
  74. # for row in result:
  75. # print(row.id,row.username,row.password)
  76. # print(result)
  77. # 删除
  78. # models.UserInfo.objects.filter(username="alex").delete()
  79. # 更新
  80. # models.UserInfo.objects.filter(id=3).update(password="69")
  81. #一对多
  82. # user_list=models.UserInfo.objects.all()
  83. models.UserInfo.objects.create(
  84. username='root1',
  85. password='',
  86. email='dasdad',
  87. url='dsadsaf',
  88. # user_group=models.UserGroup.objects.filter(id=1).first(),
  89. user_group_id=1,
  90. )
  91. return HttpResponse('orm')
  92. # def home(request):
  93. # return HttpResponse('Home')
  94. from django.views import View
  95. class Home(View):
  96. def dispatch(self, request, *args, **kwargs):
  97. # 调用父类中的dispatch
  98. print('before')
  99. result = super(Home,self).dispatch(request, *args, **kwargs)
  100. print('after')
  101. return result
  102. def get(self,request):
  103. print(request.method)
  104. return render(request, 'home.html')
  105. def post(self,request):
  106. print(request.method,'POST')
  107. return render(request, 'home.html')
settings

  1. import os
  2.  
  3. # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
  4. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  5.  
  6. # Quick-start development settings - unsuitable for production
  7. # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
  8.  
  9. # SECURITY WARNING: keep the secret key used in production secret!
  10. SECRET_KEY = 'r=q!3-2o^_ei^^$wy6geroevs*p(!r14y7s3h8(op_w%051!y$'
  11.  
  12. # SECURITY WARNING: don't run with debug turned on in production!
  13. DEBUG = True
  14.  
  15. ALLOWED_HOSTS = []
  16.  
  17. # Application definition
  18. INSTALLED_APPS = [
  19. 'django.contrib.admin',
  20. 'django.contrib.auth',
  21. 'django.contrib.contenttypes',
  22. 'django.contrib.sessions',
  23. 'django.contrib.messages',
  24. 'django.contrib.staticfiles',
  25. 'app01',
  26. ]
  27.  
  28. MIDDLEWARE = [
  29. 'django.middleware.security.SecurityMiddleware',
  30. 'django.contrib.sessions.middleware.SessionMiddleware',
  31. 'django.middleware.common.CommonMiddleware',
  32. #'django.middleware.csrf.CsrfViewMiddleware',
  33. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  34. 'django.contrib.messages.middleware.MessageMiddleware',
  35. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  36. ]
  37.  
  38. ROOT_URLCONF = 's14day19_2.urls'
  39.  
  40. TEMPLATES = [
  41. {
  42. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  43. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
  44. ,
  45. 'APP_DIRS': True,
  46. 'OPTIONS': {
  47. 'context_processors': [
  48. 'django.template.context_processors.debug',
  49. 'django.template.context_processors.request',
  50. 'django.contrib.auth.context_processors.auth',
  51. 'django.contrib.messages.context_processors.messages',
  52. ],
  53. },
  54. },
  55. ]
  56.  
  57. WSGI_APPLICATION = 's14day19_2.wsgi.application'
  58.  
  59. # Database
  60. # https://docs.djangoproject.com/en/1.10/ref/settings/#databases
  61.  
  62. DATABASES = {
  63. 'default': {
  64. 'ENGINE': 'django.db.backends.sqlite3',
  65. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  66. }
  67. }
  68.  
  69. # Password validation
  70. # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
  71.  
  72. AUTH_PASSWORD_VALIDATORS = [
  73. {
  74. 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  75. },
  76. {
  77. 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
  78. },
  79. {
  80. 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  81. },
  82. {
  83. 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  84. },
  85. ]
  86.  
  87. # Internationalization
  88. # https://docs.djangoproject.com/en/1.10/topics/i18n/
  89.  
  90. LANGUAGE_CODE = 'en-us'
  91.  
  92. TIME_ZONE = 'UTC'
  93.  
  94. USE_I18N = True
  95.  
  96. USE_L10N = True
  97.  
  98. USE_TZ = True
  99.  
  100. # Static files (CSS, JavaScript, Images)
  101. # https://docs.djangoproject.com/en/1.10/howto/static-files/
  102.  
  103. STATIC_URL = '/static/'
  104. STATICFILES_DIRS = (
  105. os.path.join(BASE_DIR, 'static'),
  106. )
project_urls

  1. from django.conf.urls import url,include
  2. from django.contrib import admin
  3. urlpatterns = [
  4. url(r'^admin/', admin.site.urls),
  5. url(r'^cmdb/', include("app01.urls")),
  6. url(r'^monitor/', include("app02.urls")),
  7. ]
  8. """
  9. urlpatterns = [
  10. url(r'^admin/', admin.site.urls),
  11. url(r'^asdfasdfasdf/(?P<nid>\d+)/(?P<uid>\d+)/', views.index, name='indexx'),
  12. url(r'^login/', views.login),
  13. # url(r'^home/', views.home),
  14. url(r'^home/', views.Home.as_view()),
  15. # url(r'^detail/', views.detail),
  16. # url(r'^detail-(\d+)-(\d+).html', views.detail), #按照形式参数顺序
  17. # url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail), #分组
  18. url(r'^detail-(?P<nid>\d+).html', views.detail),
  19. ]
  20. """
wsgi

  1. import os
  2.  
  3. from django.core.wsgi import get_wsgi_application
  4.  
  5. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "s14day19_2.settings")
  6.  
  7. application = get_wsgi_application()
detail

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <h1>详细信息</h1>
  9. <h6>用户名:{{ detail_info.name }}</h6>
  10. <h6>邮箱:{{ detail_info.email }}</h6>
  11. </body>
  12. </html>
home

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <form action="/home/" method="POST">
  9. <input type="text" name="user"/>
  10. <input type="submit" />
  11. </form>
  12. </body>
  13. </html>
index

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. body{
  8. margin: 0;
  9. }
  10. .menu{
  11. display: block;
  12. padding: 5px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="height: 48px;background-color: black;color: white">
  18. 张扬凌晨三点玩愤怒的小鸟
  19. </div>
  20. <div>
  21. <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
  22. <a class="menu" href="/cmdb/user_info/">用户管理</a>
  23. <a class="menu" href="/cmdb/user_group/">用户组管理</a>
  24. </div>
  25. <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">
  26. </div>
  27. </div>
  28. </body>
  29. </html>
login.bak

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <form action="/login/" method="POST" enctype="multipart/form-data">
  9. <p>
  10. <input type="text" name="user" placeholder="用户名" />
  11. </p>
  12. <p>
  13. <input type="password" name="pwd" placeholder="密码" />
  14. </p>
  15. <p>
  16. 男:<input type="radio" name="gender" value="1"/>
  17. 女:<input type="radio" name="gender" value="2"/>
  18. 张扬:<input type="radio" name="gender" value="3"/>
  19. </p>
  20. <p>
  21. 男:<input type="checkbox" name="favor" value="11"/>
  22. 女:<input type="checkbox" name="favor" value="22"/>
  23. 张扬:<input type="checkbox" name="favor" value="33"/>
  24. </p>
  25. <p>
  26. <select name="city" multiple>
  27. <option value="sh">上海</option>
  28. <option value="bj">北京</option>
  29. <option value="tj">天津</option>
  30. </select>
  31. </p>
  32. <p>
  33. <input type="file" name="fafafa"/>
  34. </p>
  35. <input type="submit" value="提交"/>
  36. </form>
  37. </body>
  38. </html>
login

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <form action="/cmdb/login/" method="POST" enctype="multipart/form-data">
  9. <p>
  10. <input type="text" name="user" placeholder="用户名" />
  11. </p>
  12. <p>
  13. <input type="password" name="pwd" placeholder="密码" />
  14. </p>
  15. <input type="submit" value="提交"/>
  16. </form>
  17. </body>
  18. </html>
user_detail

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. body{
  8. margin: 0;
  9. }
  10. .menu{
  11. display: block;
  12. padding: 5px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="height: 48px;background-color: black;color: white">
  18. 张扬凌晨三点玩愤怒的小鸟
  19. </div>
  20. <div>
  21. <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
  22. <a class="menu" href="/cmdb/user_info/">用户管理</a>
  23. <a class="menu" href="/cmdb/user_group/">用户组管理</a>
  24. </div>
  25. <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">
  26. <h1>用户详细信息</h1>
  27. <h5>{{ obj.id }}</h5>
  28. <h5>{{ obj.name }}</h5>
  29. <h5>{{ obj.password }}</h5>
  30. </div>
  31. </div>
  32. </body>
  33. </html>
user_edit

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. body{
  8. margin: 0;
  9. }
  10. .menu{
  11. display: block;
  12. padding: 5px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="height: 48px;background-color: black;color: white">
  18. 张扬凌晨三点玩愤怒的小鸟
  19. </div>
  20. <div>
  21. <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
  22. <a class="menu" href="/cmdb/user_info/">用户管理</a>
  23. <a class="menu" href="/cmdb/user_group/">用户组管理</a>
  24. </div>
  25. <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">
  26. <h1>编辑用户</h1>
  27. <form method="post" action="/cmdb/useredit-{{ obj.id }}/">
  28. <input style="display: none" type="text" name="id" value="{{ obj.id }}" />
  29. <input type="text" name="username" value="{{ obj.username }}" />
  30. <input type="text" name="password" value="{{ obj.password }}"/>
  31. <input type="submit" value="提交" />
  32. </form>
  33. </div>
  34. </div>
  35. </body>
  36. </html>
user_info

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. body{
  8. margin: 0;
  9. }
  10. .menu{
  11. display: block;
  12. padding: 5px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="height: 48px;background-color: black;color: white">
  18. 张扬凌晨三点玩愤怒的小鸟
  19. </div>
  20. <div>
  21. <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
  22. <a class="menu" href="/cmdb/user_info/">用户管理</a>
  23. <a class="menu" href="/cmdb/user_group/">用户组管理</a>
  24. </div>
  25. <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">
  26. <h3>添加用户</h3>
  27. <form method="POST" action="/cmdb/user_info/">
  28. <input type="text" name="user" />
  29. <input type="text" name="pwd" />
  30. <select name="group_id">
  31. {% for item in group_list %}
  32. <option value="{{ item.uid }}">{{ item.caption }}</option>
  33. {% endfor %}
  34. </select>
  35. <input type="submit" value="添加"/>
  36. </form>
  37. <h3>用户列表</h3>
  38. <ul>
  39. {% for row in user_list %}
  40. <li>
  41. <a href="/cmdb/userdetail-{{ row.id }}/">{{ row.username }}</a> |
  42. <span>{{ row.user_group.caption }}</span>
  43. <a href="/cmdb/userdel-{{ row.id }}/">删除</a> |
  44. <a href="/cmdb/useredit-{{ row.id }}/">编辑</a>
  45. </li>
  46. {% endfor %}
  47. </ul>
  48. </div>
  49. </div>
  50. </body>
  51. </html>

python学习笔记_week19的更多相关文章

  1. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  2. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  3. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  4. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  5. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  6. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

  7. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  8. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

  9. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

随机推荐

  1. NutzWk 开发框架

    官网: https://wizzer.cn/ 源码下载: https://github.com/wizzercn/NutzWk/ https://gitee.com/wizzer/NutzWk Int ...

  2. Python 创建XML

    https://blog.csdn.net/seetheworld518/article/details/49535285

  3. c语言中printf()函数中的参数计算顺序

    今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include<stdio.h> int main() { printf("%d---%d---%d&q ...

  4. ubuntu16.04 彻底卸载MySQL

    以MySQL- 5.7.18为例: sudo apt-get autoremove --purge mysql-server-5.7 #sudo apt-get remove mysql-server ...

  5. P1164小A点菜

    传送 这是一个典型的背包方案问题,设f[j]为当前价值为j的方案数,则f[j]=f[j]+f[j-a[i]],即当前方案数为选这个的方案数和不选这个东西的方案数,代码如下 #include<io ...

  6. Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?

    ylbtech-Java-学习-喜欢-品牌:互联网公司成为动物园,拟人化品牌形象真的那么有意思?  1.返回顶部 1. 当我们在思考如何在这个碎片化.多元化的时代找到真实的.不被标签的自我时,互联网中 ...

  7. ubuntu的一些常用命令及疑难杂症

    记录ubuntu下各种注意事项及常用命令 1,发热:因为硬件厂商对linux类系统的支持不足,驱动不会自动安装,所以要自己装... http://www.linuxidc.com/Linux/2015 ...

  8. windows修改远程桌面端口3389

    regedit 按照路径打开,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-T ...

  9. [UE4]创建KillInfoPanel

    不设置UniformGrid的尺寸,改成在父级“WB_FPPCharacter”中设置尺寸,这样可以更方便的控制.

  10. OpenSips使用说明

    OpenSips使用说明 安装MYSQL 安装及初始化 下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-gli ...