一个初学者的辛酸路程-继续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的创始人,吉多范罗苏 ...
随机推荐
- POJ-3669 Meteor Shower---BFS+预处理
题目链接: https://vjudge.net/problem/POJ-3669 题目大意: 巨大流星雨即将袭来.每个流星会对击中的地方以及周围(上下左右四格)造成破坏.Bessie开始时位于(0, ...
- DP上课覆盖知识点,POJ(1513)
题目链接:http://poj.org/problem?id=1513 解题报告: 思路: 知识点从第二个开始扫,递推表达式是:minlec[i]=min(minlec[k])+1,并且要保证,tim ...
- [pytorch] 官网教程+注释
pytorch官网教程+注释 Classifier import torch import torchvision import torchvision.transforms as transform ...
- centos6.x yum 安装 mysql5.6 mysql5.7
先卸载低版本MYSQL yum remove mysql* rpm -ivh http://repo.mysql.com/mysql-community-release-el6.rpm yum ins ...
- C++STL之vector向量容器
vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...
- arXiv 上传文章过程
arXiv属于预印本服务的一种,是指科研工作者的研究成果还未在正式出版物上发表,而出于和同行交流目的自愿先在学术会议上或通过互联网发布的科研论文.科技报告等文章.与刊物发表的文章以及网页发布的文章 ...
- 2、SpringBoot+Mybatis整合------一对一
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis01/tree/93398da60c647573645917b2 ...
- Django 单元测试
mock 测试 mock 是辅助单元测试的模块,用于测试不方便调用的别人的接口.举个简单的例子,比如说,我们测试django 写的微信登录接口,正常流程下,我们需要前端拉起授权窗口,获取jscode或 ...
- easyui基于 layui.laydate日期扩展组件
本人后端开发码农一个,公司前端忙的一逼,项目使用的是easyui组件,其自带的datebox组件使用起来非常不爽,主要表现在 1.自定义显示格式很麻烦 2.选择年份和月份用户体验也不好 网上有关于和M ...
- 【MYSQL笔记1】mysql的基础知识
首先进去mysql.打开电脑命令提示符(cmd):输入mysql -uroot -p 代表的意思是使用ruser使用者root的方式,打开mysql,-p代表password,如果有的话,回车之后 ...