一个初学者的辛酸路程-继续Django
- -Http Reponse(字符串)
- -render(request,'/path/a.html')
- 如果有特殊的标签怎么办?
- 如果遇到特殊的标签比如{{ name }} ,他就会把它替换掉,会把name对应的root替换掉
- -render(request,'/path/a.html',{‘name’: ‘root’})
- django-admin startproject mysite ,
- cd mysite python manage.py startapp app01,
- settings.py里面找TEMPLATE里有个DIRS:【os.path.join(BASE_DIR,'templates'),】,
- 跟上一样,settings.py里
- STATICFILES_DIRS = (
- os.path.join(BASE_DIR,'static'),
- )
- 自动: 先创建类==>相当于数据库的表
- 类里的字段代表数据库的列
- class UserInfo:
- username = 字符串
- pwd = 字符串
- age = 数字
- <body>
- <h1>我是大王</h1>
- <h3>{{ k1 }}</h3>
- <h3>{{ k2 }}</h3>
- </body>
- def servers(request):
- # return HttpResponse('OK')
- # return render(request,'servers.html')
- # return render(request,'server.tpl',{})
- # return redirect('http://www.baidu.com')
- # return render(request,'server.txt')
- return render(
- request,
- 'servers.html',
- {
- 'k1':'root',
- 'k2':123,
- 'k3':[11,22,33],
- 'k4':{'name':'alex','age':15},
- }
- )
- class UserInfo(models.Model):
- nid = models.AutoField(primary_key=True)
- username = models.CharField(max_length=32)
- pwd = models.CharField(max_length=64)
- age = models.IntegerField()
- python manage.py makemigrations
- python manage.py migrate
- 把里面的注释掉,添加下面即可。
- django默认链接mysql用的是mysqlDb,这个模块只在Python2有,在Python3没有
- 所以需要吧mysqlDB改成pymysql。
- 就有一个换的过程,如何换?
- 放在django目录下面有一个__init__.py,如下图所示:
- 那么他就会自动修改默认为pymysql来链接数据库。
- from app01 import models
- def servers(request):
- server_list = models.UserInfo.objects.all()
- #得到的是一个对象列表[userinfo(id=1,username=root,age=18),..]
- # for row in server_list:
- # print(row.nid,row.username,row.pwd,row.age)
- return render(request,'servers.html',{'server_list':server_list})
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>服务器列表</h1>
- <ul>
- {% for row in server_list %}
- <li>{{ row.nid }}-{{ row.username }}-{{ row.pwd }}-{{ row.age }}</li>
- {% endfor %}
- </ul>
- </body>
- </html>
- def add_user(request):
- if request.method == 'GET':
- return render(request,'add_user.html')
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- print(u,p,a)
- #将数据插入数据库
- #方法1
- # obj = models.UserInfo(username=u,pwd=p,age=a)
- # obj.save()
- #方法2
- models.UserInfo.objects.create(username=u,pwd=p,age=a)
- return redirect('/users')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/add_user" method="POST">
- <p><input type="text" name="user" placeholder="用户名"></p>
- <p><input type="password" name="pwd" placeholder="密码"></p>
- <p><input type="text" name="age" placeholder="年龄"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
- <div>
- <a href="/add_user">添加</a>
- </div>
- url(r'^del_user$', views.del_user),
- def del_user(request):
- nnid = request.GET.get('nid')
- # models.UserInfo.objects.all().delete()#删除整个表数据
- models.UserInfo.objects.filter(nid=nnid).delete()
- return redirect('/users')
- <ul>
- {% for row in server_list %}
- <li>{{ row.nid }}-{{ row.username }}-{{ row.pwd }}-{{ row.age }}-<a href="/del_user?nid={{ row.nid }}">删除</a></li>
- {% endfor %}
- </ul>
- url(r'^edit_user$', views.edit_user),
- def edit_user(request):
- if request.method == 'GET':
- nnid = request.GET.get('nid')
- #根据nnid获取单条数据
- # v = models.UserInfo.objects.filter(nid=nnid)
- v = models.UserInfo.objects.filter(nid=nnid).first()
- #获取的是对象列表 [UserInfo(),],永远获取的是一个列表,不是对象,如下
- #<QuerySet [<UserInfo: UserInfo object>]>
- print(v.nid,v.username,v.pwd,v.age)
- return render(request,'edit_user.html',{'obj':v})
- elif request.method == 'POST':
- nnid = request.POST.get('nid')
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- #方法1
- # obj = models.UserInfo.objects.filter(nid=nnid).first()
- # obj.username = u
- # obj.pwd = p
- # obj.age = a
- # obj.save()
- models.UserInfo.objects.filter(nid=nnid).update(username=u,pwd=p,age=a)
- return redirect('/users')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/edit_user" method="POST">
- <p style="display: none;"><input type="text" name="nid" placeholder="ID" value="{{ obj.nid }}"></p>
- <p><input type="text" name="user" placeholder="用户名" value="{{ obj.username }}"></p>
- <p><input type="password" name="pwd" placeholder="密码" value="{{ obj.pwd }}"></p>
- <p><input type="text" name="age" placeholder="年龄" value="{{ obj.age }}"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- </html>
- url(r'^edit_user$', views.edit_user),
- url(r'^edit_user-(\d+).html$', views.edit_user),
- def edit_user(request,a1):
- print(a1)
- return HttpResponse(a1)
- def edit_user(request,a1,a2):
- print(a1,a2)
- return HttpResponse(a1+'--'+a2)
- url(r'^edit_user-(\d+)-(\d+).html$', views.edit_user),
- 但是它这个是按照顺序传送的,通过这种方式也可以传值,但是呢,他是依赖顺序的。
- url(r'^edit_user-(?P<n1>\d+)-(?P<n2>\d+).html$', views.edit_user),
- def edit_user(request,n1,n2):
- print(n1,n2)
- return HttpResponse(n1+'--'+n2)
- def edit_user_new(request,nnid):
- if request.method == 'GET':
- obj = models.UserInfo.objects.filter(nid=nnid).first()
- return render(request,'edit_user_new.html',{'obj':obj})
- elif request.method == 'POST':
- u = request.POST.get('user')
- p = request.POST.get('pwd')
- a = request.POST.get('age')
- models.UserInfo.objects.filter(nid=nnid).update(username=u,pwd=p,age=a)
- return redirect('/users')
- url(r'^edit_user_new-(?P<nnid>\d+).html$', views.edit_user_new),
- <body>
- <h1>新</h1>
- <form method="POST" action="edit_user_new-{{ obj.nid }}.html">
- {# <p style="display: none;"><input type="text" name="nid" placeholder="ID" value="{{ obj.nid }}"></p>#}==>这个就不需要了
- <p><input type="text" name="user" placeholder="用户名" value="{{ obj.username }}"></p>
- <p><input type="password" name="pwd" placeholder="密码" value="{{ obj.pwd }}"></p>
- <p><input type="text" name="age" placeholder="年龄" value="{{ obj.age }}"></p>
- <input type="submit" value="提交">
- </form>
- </body>
- <form method="POST" action="{% url "nnn" nnid=obj.nid %}">
- url(r'^edit_user_new-(?P<nnid>\d+).html$', views.edit_user_new,name='nnn'),
- url(r'^app01/',include('app01.urls')),
- url(r'^app02/',include('app02.urls')),
- url(r'^app03/',include('app03.urls')),
- url(r'^app01/',include('app01.urls')),
- url(r'^app02/',include('app02.urls')),
- url(r'^test$', views.test),
- def upload(request):
- if request.method == 'GET':
- return render(request,'upload.html')
- elif request.method == 'POST':
- obj = request.FILES.get('fafafa')
- import os
- f = open(os.path.join('upload',obj.name),'wb')
- for line in obj.chunks():
- f.write(line)
- f.close()
- return HttpResponse('test')
- {% else %}
- {{ item }}
- {% endfor %}
- 截取前30个单词
- 写个URL
- url(r'^tpl.htm$', views.tpl),
- 写个views
- def tpl(request):
- return render(request,'tpl.html',{'summary':'dfdsfdsffffffffffdddddddddddfdfd'})
- 写个HTML
- <body>
- {{ summary }}
- <br/>
- {{ summary|truncatechars:8 }}
- </body>
- 注意上面的取字符的8前面不要有空格,不然会报错
- 效果如下:
- Invalid filter
- from django import template
- register = template.Library()
- @register.filter
- def ji(value):
- return 'jijiji'
- {{ summary|ji:888 }}
- from django.utils.safestring import mark_safe
- {% test 1 2 3 %}
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- body{
- margin:0;
- }
- .pg-header{
- height:48px;
- color: white;
- }
- .pg-body .menus{
- width:20%;
- float: left;
- height:500px;
- }
- .pg-body .contents{
- width:80%;
- float: left;
- }
- </style>
- {% block css %}{% endblock %}
- </head>
- <body>
- <div class="pg-header"></div>
- <div class="pg-body">
- <div class="menus"></div>
- <div class="contents">
- {% block bd %}{% endblock %}
- </div>
- </div>
- {% block js %}{% endblock %}
- </body>
- </html>
- {% extends 'layout.html' %}
- {% block css %}
- <style></style>
- {% endblock %}
- {% block bd %}
- <h1>组列表</h1>
- {% endblock %}
- {% block js %}
- <script></script>
- {% endblock %}
- def login(request):
- 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,pwd=p).first()
- #models.UserInfo.objects.filter(username=u,pwd=p).count()
- if obj:
- # 在请求者口袋放东西
- import datetime
- d = datetime.datetime.utcnow()
- m = datetime.timedelta(seconds=10)
- end = d + m
- obj = redirect('/users')
- obj.set_cookie(key='user_name',value=u,max_age=10,expires=end)
- return obj
- else:
- return render(request,'login.html',{'msg':'用户名或密码错误'})
- def users(request):
- #如果去摸口袋,有就登录,没有就重定向到login页面
- v = request.COOKIES.get('user_name')
- if not v:
- return redirect('/login')
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <form action="/login" method="POST">
- <p><input type="text" name="user"></p>
- <p><input type="password" name="pwd"></p>
- <input type="submit" value="登录"> {{ msg }}
- </form>
- </body>
- </html>
- request.session['username'] = u
- def login(request):
- 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,pwd=p).first()
- #models.UserInfo.objects.filter(username=u,pwd=p).count()
- if obj:
- obj = redirect('/users')
- # 在请求者口袋放东西
- request.session['username'] = u
- return obj
- else:
- return render(request,'login.html',{'msg':'用户名或密码错误'})
- def users(request):
- #如果去摸口袋,有就登录,没有就重定向到login页面
- v = request.session.get('username')
- if not v:
- return redirect('/login')
一个初学者的辛酸路程-继续Django的更多相关文章
- 一个初学者的辛酸路程-依旧Django
回顾: 1.Django的请求声明周期? 请求过来,先到URL,URL这里写了一大堆路由关系映射,如果匹配成功,执行对应的函数,或者执行类里面对应的方法,FBV和CBV,本质上返回的内容都是字符串 ...
- 一个初学者的辛酸路程-初识Django
前言: 主要是关于JavaScript的高级部分以及Django 主要内容: 一.jQuery 事件绑定: DOM事件绑定: -直接在标签上绑定 第一种: $('.title').click(func ...
- 一个初学者的辛酸路程-基于Django写BBS项目
前言 基于Django的学习 详情 登录界面 找个模板 http://v3.bootcss.com/examples/signin/ 右键,检查源码 函数 def login(request) ...
- 一个初学者的辛酸路程-python操作SQLAlchemy-13
前言 其实一开始写blog,我是拒绝的,但是,没办法,没有任何理由抗拒.今天呢,要说的就是如何使用Python来操作数据库. SQLAlchemy SQLAlchemy是Python编程语言下的一款O ...
- 一个初学者的辛酸路程-FTP-9
前言 今天,我要描述一个FTP的故事 主要内容 嗯,今天主要以阶梯性的形式来做一个FTP项目. 第一步: 我要实现这么一个功能,一个FTP客户端,1个FTP服务端,2端建立连接以后可以进行通讯. 服务 ...
- 一个初学者的辛酸路程-socket编程-8
前言: 你会发现会网络是多么幸福的事情 主要内容: socket 概念: socket本质上就是2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递.我们知道网络通信都是基于 ...
- 一个初学者的辛酸路程-Python基础-3
前言 不要整天沉迷于学习-. 字典 一.我想跟你聊聊字典 1.为何要有字典? 大家有没有想过为什么要有字典?有列表不就可以了吗? 也许大家会这么认为,我给大家举个例子,大家就明白了. 比如说,我通讯录 ...
- 一个初学者的辛酸路程-了解Python-2
前言 blog花了一上午写的,结果笔记本关机了,没有保存,找不到了,找不到了啊,所以说,你看的每一篇blog可能都是我写了2次以上的--.哎!! 代码改变世界,继续......... Python基础 ...
- 一个初学者的辛酸路程-初识Python-1
前言 很喜欢的一句话,与诸位共勉. 人的一切痛苦,本质上都是对自己无能的愤怒----王小波. 初识Python 一.它的爸爸是谁 首先,我们需要认识下面这位人物. 他是Python的创始人,吉多范罗苏 ...
随机推荐
- Last_IO_Errno: 1032
(一):更新找不到记录 1032 Last_SQL_Errno: 1032 Last_SQL_Error: Could not execute Update_rows ...
- 关于Content-Type: multipart/form-data的支持
关于Content-Type: multipart/form-data的支持 发布于 537天前 作者 yzhang226 303 次浏览 复制 上一个帖子 下一个帖子 标签: 无 今天 ...
- Uva 10791 最小公倍数的最小和 唯一分解定理
题目链接:https://vjudge.net/contest/156903#problem/C 题意:给一个数 n ,求至少 2个正整数,使得他们的最小公倍数为 n ,而且这些数之和最小. 分析: ...
- vue中动画的封装
<style> .v-enter,.v-leave-to{ opacity: 0; } .v-enter-active,.v-leave-active{ transition:opacit ...
- css术语和概念
.vocabulary{ height:99px; color:transparent; } 属性 上面示意css代码中的height和color就是属性. 值 上面的99px就是值 整数值: ...
- 2018.9.6 Java常考知识点总结
一 Java中的值传递和引用传递(非常重要) 首先要明确的是:"对象传递(数组.类.接口)是引用传递,原始类型数据(整型.浮点型.字符型.布尔型)传递是值传递." 那么什么是值传递 ...
- 2017.9.24 基于HTML+JavaScript+CSS的开发案例&&JavaScript+CSS+DIV实现表格变色
1.JavaScript+CSS+DIV实现下拉菜单 1.1 层标签<div> 基本语法: <div id="层编号" style="position: ...
- Laravel 5 : Call to undefined function Illuminate\Foundation\Bootstrap\mb_internal_encoding()
自己组装的apache,php,mysql phpinfo显示 OpenSSL support disabled (install ext/openssl) 判断为权限问题,所以修改如下. 1 ...
- React后台管理系统-订单管理
1.订单管理页面和商品管理页面类似,都是一个搜索组件+列表组件 2.搜索框search组件 import React from 'react'; class ListSearch extends ...
- Spring详解篇之IoC控制反转
###一.Spring概况 spring是一个开源框架 是一个轻量的控制反转和面向切面的容器框架 大小和开销都是轻量的. 通过控制反转技术可以达到松耦合的目的 切面编程,允许通过分离应用的业务逻辑. ...