一个初学者的辛酸路程-继续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的创始人,吉多范罗苏 ...
随机推荐
- jdk8环境变量 jdk8图解安装 java8安装
JDK8 是JDK的最新版本,加入了很多新特性,如果我们要使用,需要下载安装: JDK8在windows xp下安装有点问题,所以在WIN7下安装 WIN7操作系统有32位和64位,分别要下载对应的J ...
- Python-三元运算符和lambda表达式
一.三元运算符 #当满足条件1时,res=值1:否则res=值2 res = 值1 if 条件1 else 值2 举例说明: res=10 #简单的if else语句 if abs(res)>0 ...
- MongoDB在MFC下使用C++驱动编译错误的解决
.post p{text-indent: 2em;} 今天使用MongoDB的C++驱动,在编译连接的时候一直出现错误,显示的string_data.h下93行max宏的问题,可视其本身并不是调用ma ...
- JSON格式自动解析遇到的调用方法问题.fromJson() ..readValue()
所使用的API Store是 聚合数据 使用 手机归属地查询 功能 因百度的apistore.baidu.com 2016年12月开始至今天不接受新用户调取.聚合数据一个接口免费. 一.通过谷歌的go ...
- ES6初识- Class
{ //基本定义和生成实例 class Parent{ //构造函数 constructor(name='lisi'){ this.name=name; } //属性get,set get longN ...
- Eclipse+Python环境配置
Eclipse+Pydev 1.安装Eclipse Eclipse可以在它的官方网站Eclipse.org找到并下载,通常我们可以选择适合自己的Eclipse版本,比如Eclipse Classic. ...
- Mysql_Binary_Install_Scripts(采用二进制方式安装)
1.1 MYSQL实现代码 #!/bin/bash ######################################## #auth:wolf_dreams #time:2018-1 ...
- 控制器方法重复命名导致nginx 504的问题
由于控制器方法重复命名重启swoole后运行代码导致 504 Gateway Time-out ,查看laravel日志和nginx日志才找原因所在,以后还是要多看错误日志.
- NOIP PJ游记
Day -1 感觉自信满满,一等奖应该稳了,毕竟初一时我这么菜都拿了二等奖,然后就睡觉了... Day 1 在大巴上玩元气骑士可开心了,车上欢欢喜喜,到了考场,一眼看题,以为很简单. T1硬模拟... ...
- POJ 3608 凸包间最短距离(旋转卡壳)
Bridge Across Islands Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11539 Accepted: ...