python  保障系统

  1. from django.shortcuts import render,redirect,HttpResponse
  2. from app01 import models
  3. from django.forms import Form
  4. from django.forms import fields
  5. from utils.pager import PageInfo
  6. # Create your views here.
  7.  
  8. class Logins(Form):
  9. # 定一个Form组件验证
  10. user=fields.CharField(
  11.  
  12. min_length=3,
  13. strip=True,
  14. required=True,
  15. error_messages={
  16. 'min_length':'太短了',
  17. 'required':'不能为空',
  18. }
  19. )
  20. pwd=fields.CharField(
  21. min_length=5,
  22. strip=True,
  23. required=True,
  24. error_messages={
  25. 'min_length': '太短了',
  26. 'required': '不能为空',
  27. }
  28. )

定义一个FORM验证

url视图函数

  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from app01 import views
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^login/', views.login),
  7. url(r'^user_out/', views.user_out),
  8. url(r'^registered/', views.registered),
  9. url(r'^check_code/', views.check_code),
  10.  
  11. url(r'^Avatars/', views.Avatars),
  12. url(r'^bokes/(\w+).html$', views.bokes),
  13. url(r'^boke/(?P<type_id>\d+)/', views.boke),
  14.  
  15. url(r'^', views.boke),
  16.  
  17. ]
  1. from PIL import Image,ImageDraw,ImageFont,ImageFilter
  2. import random
  3. #导入生成随机字符的模块
  4. def rd_check_code(width=120,height=30,char_length=5,font_file='kumo.ttf',font_size=28):
  5. # 定义一个生成验证码的函数,宽120,高30是验证码的背景图大小,char_langth是在这个背景图上能写几个字符,file是设置显示在背景的字体样式,font_size是字体大小
  6. code=[]
  7. # 定义一个空列表
  8. img=Image.new(mode='RGB',size=(width,height),color=(255,255,255))
  9. #设置一个img背景图颜色是使用RGB,背景图的大小是120,30 颜色是用RGB的255,255,255
  10. draw=ImageDraw.Draw(img,mode='RGB')
  11. #创建一个画板,画板背景图是img,颜色采用RGB
  12. def rndChar():
  13. '''
  14. 生成随机字母
  15. :return:
  16. '''
  17. return chr(random.randint(65,90))
  18. #返回一个转成字符的字母(65,90之间在ascii码表是26个字母的大写)
  19. def rndColor():
  20. '''
  21. 生成随机颜色
  22. :return:
  23. '''
  24. return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
  25. #返回一个组数字(由在ascii码表0,255对应的内容生成三个数字拼接)
  26.  
  27. font=ImageFont.truetype(font_file,font_size)
  28. # 创建一生成个文本的(font_file是文本字体的样式,font_size是文本字体的大小)
  29. for i in range(char_length):
  30. '''
  31. 生成字符(文字)
  32. '''
  33. # 循环在这个文本上最大能写几个字符总数
  34. char=rndChar()
  35. # 获取一个随机的字符
  36. code.append(char)
  37. # 追加到code列表中
  38. h=random.randint(0,4)
  39. # 从0之4之间生成随机的数字
  40. draw.text([i * width / char_length , h], char,font=font,fill=rndColor())
  41. #写文本(坐标1是每次循环的i数值乘以宽度的值在除以最大显示数值,h是从0之4生成的随机数字,组成---->0,h ---->24,h---->48,h---->120,h)
  42. #设置font=font是默认自己选择的字体类型,fill是填充的颜色是执行随机颜色函数获取的随机颜色组
  43.  
  44. for i in range(5):
  45. '''
  46. 生成干扰点
  47. '''
  48. draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())
  49. #画点坐标1是0和,120之间随机生成的数值,坐标2是0和30随机生成的数值,填充的颜色是执行随机颜色函数获取的随机颜色组
  50.  
  51. for i in range(5):
  52. '''
  53. 生成干扰圆圈
  54. '''
  55. draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())
  56. #画点坐标1是0和,120之间随机生成的数值,坐标2是0和30随机生成的数值,填充的颜色是执行随机颜色函数获取的随机颜色组
  57. x=random.randint(0,width)
  58. # x=0到120之间随机生成的数字
  59. y=random.randint(0,height)
  60. # y=0到30之间随机生成的数字
  61. draw.arc((x,y,x+4,y+4),0,90,fill=rndColor())
  62. #设置圆存在的坐标和圆的坐标,设置角度的起始位置,设置角度的结束位置,填充的颜色是执行随机颜色函数获取的随机颜色组
  63. for i in range(5):
  64. '''
  65. 设置干扰的线
  66. '''
  67. x1=random.randint(0,width)
  68. # x1=从0到120之间生成随机的数字
  69. y1=random.randint(0,height)
  70. # y1=从0到30之间生成随机的数字
  71. x2 = random.randint(0, width)
  72. # x2 = 从0到120之间生成随机的数字
  73. y2 = random.randint(0, height)
  74. # y2=从0到30之间生成随机的数字
  75. draw.line((x1,y1,x2,y2),fill=rndColor())
  76. #设置画线的起始坐标和结束坐标,填充的颜色是执行随机颜色函数获取的随机颜色组
  77. img=img.filter(ImageFilter.EDGE_ENHANCE_MORE)
  78. # 设置滤镜,让验证码的色差更加明显
  79. return img,''.join(code)
  80. #返回img整个画板,和拼接的随机字符(字符串类型)

封装的验证码

  1. def check_code(request):
  2. from io import BytesIO
  3. from app01.check.check_code import rd_check_code
  4. img,code=rd_check_code()
  5. stream=BytesIO()
  6. img.save(stream,'png')
  7. request.session['yzm']=code
  8. return HttpResponse(stream.getvalue())

验证调用函数

  1. def login(request):
  2. if request.method=='GET':
  3. return render(request,'login.html')
  4. else:
  5. input_yzm=request.POST.get('yzm')
  6. session_yzm=request.session.get('yzm')
  7. if input_yzm.upper()==session_yzm.upper():
  8. obj = Logins(request.POST)
  9. if obj.is_valid():
  10. users=models.UserInfo.objects.filter(username=obj.cleaned_data['user'],password=obj.cleaned_data['pwd']).first()
  11. if users:
  12. userss = models.UserInfo.objects.filter(username=obj.cleaned_data['user'], password=obj.cleaned_data['pwd']).values(
  13. 'avatar',
  14. 'username',
  15. 'blog__article__title',
  16. 'blog__article__comment',
  17. 'blog__article__summary',
  18. 'blog__article__comment_count',
  19. 'blog__article__up_count',
  20. 'blog__site',
  21. )
  22. print(userss[0]['avatar'])
  23. request.session['users']={'users':obj.cleaned_data['user'],'touxiang':userss[0]['avatar'],'site':userss[0]['blog__site']}
  24. article_list = models.UserInfo.objects.filter(username=obj.cleaned_data['user']).count()
  25. page_info = PageInfo(request.GET.get('page'), article_list, 10, '/home.html', 11)
  26. # print(page_info.start())
  27. article_list = models.UserInfo.objects.filter(username=obj.cleaned_data['user'])[page_info.start():page_info.end()]
  28. return redirect('/boke/')
  29. # return render(request,'boke.html',{
  30. # 'touxiang':userss[0]['avatar'],
  31. # 'a_list':userss,
  32. # 'article_list': article_list,
  33. # 'page_info':page_info,
  34. # 'zx':'注销',
  35. # 'wdbok':'我的博客',
  36. # })
  37. return render(request, 'login.html', {'zhm': '账号或密码错误!'})
  38. return render(request, 'login.html', {'obj':obj })
  39. else:
  40. return render(request,'login.html',{'msg':'验证码错误!'})

用户登录 views

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. <style>
  8. .login{
  9. width: 600px;
  10. margin: 0 auto;
  11. padding: 20px;
  12. margin-top: 90px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div class="login">
  18. <form class="form-horizontal" action="/login/" method="POST">
  19. {% csrf_token %}
  20. <div class="form-group">
  21. <label class="col-sm-2 control-label">用户名</label>
  22. <div class="col-sm-10">
  23. <input type="text" class="form-control" placeholder="用户名" name="user">{{ obj.errors.user.0 }}
  24. </div>
  25. </div>
  26. <div class="form-group">
  27. <label class="col-sm-2 control-label">密码</label>
  28. <div class="col-sm-10">
  29. <input type="password" class="form-control" placeholder="密码" name="pwd">{{ obj.errors.pwd.0 }}
  30. </div>
  31. </div>
  32. <div class="form-group">
  33. <label class="col-sm-2 control-label">验证码</label>
  34. <div class="col-sm-5">
  35. <input type="text" class="form-control" placeholder="验证码" name="yzm">
  36. {{ msg }}
  37.  
  38. </div>
  39. <div class="col-sm-5">
  40. <img style="width: 120px;height: 30px;" src="/check_code/">
  41. &nbsp,&nbsp;
  42. <a href="/login/">更换验证码</a>
  43. </div>
  44. </div>
  45.  
  46. <div class="form-group">
  47. <div class="col-sm-offset-2 col-sm-10">
  48. <p><input type="checkbox" value="一个月免登录" name="jj">一个月免登录</p>
  49. <input type="submit" class="btn btn-default" value="登录" />{{ zhm }}
  50. </div>
  51.  
  52. </div>
  53. </form>
  54. </div>
  55. </body>
  56. </html>

用户登录页面.html

  1. def boke(request,*args, **kwargs):
  2. # 获取当前URL
  3. print(request.path_info)
  4. condition = {}
  5. a_list=models.Article.objects.all()
  6. type_id = int(kwargs.get('type_id')) if kwargs.get('type_id') else None
  7. if type_id:
  8. a_list=models.Article.objects.filter(category=type_id)
  9. condition['article_type_id'] = type_id
  10. type_choice_list = models.Article.type_choices
  11. article_list = models.Article.objects.filter(**condition).count()
  12. page_info = PageInfo(request.GET.get('page'), article_list, 10, '/home.html', 11)
  13. # print(page_info.start())
  14. article_list = models.Article.objects.filter(**condition)[page_info.start():page_info.end()]
  15.  
  16. return render(
  17. request,
  18. 'boke.html',
  19. {
  20. 'a_list':a_list,
  21. 'type_choice_list': type_choice_list,
  22. 'article_list': article_list,
  23. 'page_info':page_info,
  24. 'type_id': type_id,
  25. 'touxiang':'/static/8.png',
  26. 'users':'登录',
  27. 'zx':'注册',
  28. 'centen':'测试'
  29.  
  30. }
  31. )

用户主页面 views

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css" />
  7. <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css" />
  8. <link rel="stylesheet" href="/static/css/commons.css"/>
  9. <style>
  10. .touxiang{
  11. width:48px;
  12. height: 48px;
  13. border-radius: 50%;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. {#<nav class="navbar navbar-default no-radius">#}
  19. {# <div class="container">#}
  20. {# <!-- Brand and toggle get grouped for better mobile display -->#}
  21. {# <div class="navbar-header">#}
  22. {# <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">#}
  23. {# <span class="sr-only">Toggle navigation</span>#}
  24. {# <span class="icon-bar"></span>#}
  25. {# <span class="icon-bar"></span>#}
  26. {# <span class="icon-bar"></span>#}
  27. {# </button>#}
  28. {# <a class="navbar-brand a1" href="#">老子的技术论坛</a>#}
  29. {# </div>#}
  30. {##}
  31. {# <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">#}
  32. {# <ul class="nav navbar-nav">#}
  33. {# {% if type_id %}#}
  34. {# <li><a class="a1" href="/">全部</a></li>#}
  35. {# {% else %}#}
  36. {# <li><a class="active" href="/">全部</a></li>#}
  37. {# {% endif %}#}
  38. {# {% for item in type_choice_list %}#}
  39. {# {% if item.0 == type_id %}#}
  40. {# <li class="active"><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>#}
  41. {# {% else %}#}
  42. {# <li><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>#}
  43. {# {% endif %}#}
  44. {# {% endfor %}#}
  45. {# </ul>#}
  46. {# {% if request.session.users %}#}
  47. {# <ul class="nav navbar-nav navbar-right">#}
  48. {# <li><a class="a1" href="/bokes/{{ request.session.users.site }}.html">我的博客</a></li>#}
  49. {# <li><a class="a1" href="#">{{ request.session.users.users }}</a></li>#}
  50. {# <li><a class="a1" href="/user_out/">注销</a></li>#}
  51. {# <li><img class="touxiang" src="{{ request.session.users.touxiang }}"></li>#}
  52. {# </ul>#}
  53. {# {% else %}#}
  54. {# <ul class="nav navbar-nav navbar-right">#}
  55. {# <li><a class="a1" href="/login/"> 登录</a></li>#}
  56. {# <li><a class="a1" href="/registered/">注册</a></li>#}
  57. {# <li><img class="touxiang" src="{{ touxiang }}"></li>#}
  58. {# </ul>#}
  59. {# {% endif %}#}
  60. {# </div>#}
  61. {# </div>#}
  62. {#</nav>#}
  63. {#{% if centen == '测试' %}#}
  64. {% if type_id %}
  65. <nav class="navbar navbar-default no-radius">
  66. <div class="container">
  67. <!-- Brand and toggle get grouped for better mobile display -->
  68. <div class="navbar-header">
  69. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
  70. data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
  71. <span class="sr-only">Toggle navigation</span>
  72. <span class="icon-bar"></span>
  73. <span class="icon-bar"></span>
  74. <span class="icon-bar"></span>
  75. </button>
  76. <a class="navbar-brand a1" href="#">老子的技术论坛</a>
  77. </div>
  78.  
  79. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  80. <ul class="nav navbar-nav">
  81. {% if type_id %}
  82. <li><a class="a1" href="/">全部</a></li>
  83. {% else %}
  84. <li class="active"><a href="/">全部</a></li>
  85. {% endif %}
  86. {% for item in type_choice_list %}
  87. {% if item.0 == type_id %}
  88. <li class="active"><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  89. {% else %}
  90. <li><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  91. {% endif %}
  92. {% endfor %}
  93. </ul>
  94. {% if request.session.users %}
  95. <ul class="nav navbar-nav navbar-right">
  96. <li><a class="a1" href="/bokes/{{ request.session.users.site }}.html">我的博客</a></li>
  97. <li><a class="a1" href="#">{{ request.session.users.users }}</a></li>
  98. <li><a class="a1" href="/user_out/">注销</a></li>
  99. <li><img class="touxiang" src="{{ request.session.users.touxiang }}"></li>
  100. </ul>
  101. {% else %}
  102. <ul class="nav navbar-nav navbar-right">
  103. <li><a class="a1" href="/login/"> 登录</a></li>
  104. <li><a class="a1" href="/registered/">注册</a></li>
  105. <li><img class="touxiang" src="{{ touxiang }}"></li>
  106. </ul>
  107. {% endif %}
  108. </div>
  109. </div>
  110. </nav>
  111. <div>
  112. <div class="container">
  113. <div class="col-md-8">
  114. <div class="article-list">
  115. <div class="article-item">
  116. {% for row in a_list %}
  117. <div><a class="a1">{{ row.title }}</a></div>
  118. <div class="art-body clearfix">
  119. <a><img class="left a1" src="{{ row.blog.user.avatar }}"></a>
  120. <a class="a1">{{ row.summary }}</a>
  121. </div>
  122. <a class="a1">
  123. <p><i class="fa fa-user-o" aria-hidden="true"></i>
  124. {{ row.blog.user.username }} 发布于 2017-07-10
  125. <i class="fa fa-commenting-o" aria-hidden="true"></i>
  126. {{ row.comment_count }}
  127. <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
  128. {{ row.up_count }}
  129. </p>
  130.  
  131. <hr style="border:0.5px dotted darkgray"/>
  132. </a>
  133. {% endfor %}
  134. <nav aria-label="Page navigation">
  135. <ul class="pagination">
  136. {{ page_info.pager|safe }}
  137. </ul>
  138. </nav>
  139. </div>
  140. </div>
  141. </div>
  142. <div class="col-md-4">
  143. <div class="panel panel-default">
  144. <div class="panel-heading">Panel heading without title</div>
  145. <div class="panel-body">
  146. <p>人生若只如初见,何事秋风悲画扇</p>
  147. <p>等闲变却故人心,却道故人心易变</p>
  148. <p>骊山语罢清宵半,泪雨霖铃终不怨</p>
  149. <p>何如薄幸锦衣郎,比翼连枝当日愿</p>
  150. </div>
  151. </div>
  152. <div class="panel panel-default">
  153. <div class="panel-heading">Panel heading without title</div>
  154. <div class="panel-body">
  155. <p>十年生死两茫茫,不思量,自难忘</p>
  156. <p>千里孤坟,无处话凄凉</p>
  157. <p>纵使相逢应不识,尘满面,鬓如霜</p>
  158. <p>夜来幽梦忽还乡,小轩窗,正梳妆</p>
  159. <p>相顾无言,惟有泪千行</p>
  160. <p>料得年年肠断处,明月夜,短松冈</p>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. {% else %}
  167. <nav class="navbar navbar-default no-radius">
  168. <div class="container">
  169. <!-- Brand and toggle get grouped for better mobile display -->
  170. <div class="navbar-header">
  171. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
  172. data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
  173. <span class="sr-only">Toggle navigation</span>
  174. <span class="icon-bar"></span>
  175. <span class="icon-bar"></span>
  176. <span class="icon-bar"></span>
  177. </button>
  178. <a class="navbar-brand a1" href="#">老子的技术论坛</a>
  179. </div>
  180.  
  181. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  182. <ul class="nav navbar-nav">
  183. {% if type_id %}
  184. <li><a class="a1" href="/">全部</a></li>
  185. {% else %}
  186. <li class="active"><a href="/">全部</a></li>
  187. {% endif %}
  188. {% for item in type_choice_list %}
  189. {% if item.0 == type_id %}
  190. <li class="active"><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  191. {% else %}
  192. <li><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  193. {% endif %}
  194. {% endfor %}
  195. </ul>
  196. {% if request.session.users %}
  197. <ul class="nav navbar-nav navbar-right">
  198. <li><a class="a1" href="/bokes/{{ request.session.users.site }}.html">我的博客</a></li>
  199. <li><a class="a1" href="#">{{ request.session.users.users }}</a></li>
  200. <li><a class="a1" href="/user_out/">注销</a></li>
  201. <li><img class="touxiang" src="{{ request.session.users.touxiang }}"></li>
  202. </ul>
  203. {% else %}
  204. <ul class="nav navbar-nav navbar-right">
  205. <li><a class="a1" href="/login/"> 登录</a></li>
  206. <li><a class="a1" href="/registered/">注册</a></li>
  207. <li><img class="touxiang" src="{{ touxiang }}"></li>
  208. </ul>
  209. {% endif %}
  210. </div>
  211. </div>
  212. </nav>
  213. <div>
  214. <div class="container">
  215. <div class="col-md-8">
  216. <div class="article-list">
  217. <div class="article-item">
  218. {% for row in a_list %}
  219. <div><a class="a1">{{ row.title }}</a></div>
  220. <div class="art-body clearfix">
  221. <a class="a1"><img class="left" src="{{ row.blog.user.avatar }}"></a>
  222. <a class="a1">{{ row.summary }}</a>
  223. </div>
  224. <a class="a1">
  225. <p><i class="fa fa-user-o" aria-hidden="true"></i>
  226. {{ row.blog.user.username }} 发布于 2017-07-10
  227. <i class="fa fa-commenting-o" aria-hidden="true"></i>
  228. {{ row.comment_count }}
  229. <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
  230. {{ row.up_count }}
  231. </p>
  232. <hr style="border:0.5px dotted darkgray"/>
  233. </a>
  234.  
  235. {% endfor %}
  236. <nav aria-label="Page navigation">
  237. <ul class="pagination">
  238. {{ page_info.pager|safe }}
  239. </ul>
  240. </nav>
  241. </div>
  242. </div>
  243. </div>
  244. <div class="col-md-4">
  245. <div class="panel panel-default">
  246. <div class="panel-heading">Panel heading without title</div>
  247. <div class="panel-body">
  248. <p>人生若只如初见,何事秋风悲画扇</p>
  249. <p>等闲变却故人心,却道故人心易变</p>
  250. <p>骊山语罢清宵半,泪雨霖铃终不怨</p>
  251. <p>何如薄幸锦衣郎,比翼连枝当日愿</p>
  252. </div>
  253. </div>
  254. <div class="panel panel-default">
  255. <div class="panel-heading">Panel heading without title</div>
  256. <div class="panel-body">
  257. <p>十年生死两茫茫,不思量,自难忘</p>
  258. <p>千里孤坟,无处话凄凉</p>
  259. <p>纵使相逢应不识,尘满面,鬓如霜</p>
  260. <p>夜来幽梦忽还乡,小轩窗,正梳妆</p>
  261. <p>相顾无言,惟有泪千行</p>
  262. <p>料得年年肠断处,明月夜,短松冈</p>
  263. </div>
  264. </div>
  265. </div>
  266. </div>
  267. </div>
  268. {% endif %}
  269. {#{% else %}#}
  270. {# <div>#}
  271. {# <div class="container">#}
  272. {# <div class="col-md-8">#}
  273. {# <div class="article-list">#}
  274. {# <div class="article-item">#}
  275. {# {% for row in a_list %}#}
  276. {# <div><a class="a1">{{ row.blog__article__title }}</a></div>#}
  277. {# <div class="art-body clearfix">#}
  278. {# <a><img class="left a1" src="{{ row.avatar }}"></a>#}
  279. {# <a class="a1">{{ row.blog__article__summary }}</a>#}
  280. {# </div>#}
  281. {# <a class="a1">#}
  282. {# <p><i class="fa fa-user-o" aria-hidden="true"></i>#}
  283. {# {{ row.username }} 发布于 2017-07-10#}
  284. {# <i class="fa fa-commenting-o" aria-hidden="true"></i>#}
  285. {# {{ row.blog__article__comment_count }}#}
  286. {# <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>#}
  287. {# {{ row.blog__article__up_count }}#}
  288. {# </p>#}
  289. {##}
  290. {# <hr style="border:0.5px dotted darkgray"/>#}
  291. {# </a>#}
  292. {# {% endfor %}#}
  293. {# <nav aria-label="Page navigation">#}
  294. {# <ul class="pagination">#}
  295. {# {{ page_info.pager|safe }}#}
  296. {# </ul>#}
  297. {# </nav>#}
  298. {# </div>#}
  299. {# </div>#}
  300. {# </div>#}
  301. {# <div class="col-md-4">#}
  302. {# <div class="panel panel-default">#}
  303. {# <div class="panel-heading">Panel heading without title</div>#}
  304. {# <div class="panel-body">#}
  305. {# <p>人生若只如初见,何事秋风悲画扇</p>#}
  306. {# <p>等闲变却故人心,却道故人心易变</p>#}
  307. {# <p>骊山语罢清宵半,泪雨霖铃终不怨</p>#}
  308. {# <p>何如薄幸锦衣郎,比翼连枝当日愿</p>#}
  309. {# </div>#}
  310. {# </div>#}
  311. {# <div class="panel panel-default">#}
  312. {# <div class="panel-heading">Panel heading without title</div>#}
  313. {# <div class="panel-body">#}
  314. {# <p>十年生死两茫茫,不思量,自难忘</p>#}
  315. {# <p>千里孤坟,无处话凄凉</p>#}
  316. {# <p>纵使相逢应不识,尘满面,鬓如霜</p>#}
  317. {# <p>夜来幽梦忽还乡,小轩窗,正梳妆</p>#}
  318. {# <p>相顾无言,惟有泪千行</p>#}
  319. {# <p>料得年年肠断处,明月夜,短松冈</p>#}
  320. {# </div>#}
  321. {# </div>#}
  322. {# </div>#}
  323. {# </div>#}
  324. {# </div>#}
  325. {#{% endif %}#}
  326. </body>
  327. </html>

用户主页面内容.html

用户注销函数

  1. def user_out(request):
  2. request.session.delete()
  3. return redirect('/boke/')
  1. import os
  2. path_lis = []
  3. def registered(request):
  4. if request.method=='GET':
  5. return render(request,'registered.html')
  6. else:
  7. if request.session.get('yzm').upper() == request.POST.get('yzm').upper():
  8. obj = User_idne(request.POST)
  9. if obj.is_valid():
  10. dic = obj.cleaned_data.pop('pwds')
  11. if dic==obj.cleaned_data['password']:
  12. path_liss='\\'+ path_lis[-1]
  13. print(path_liss)
  14. obj.cleaned_data['avatar']=path_liss
  15. models.UserInfo.objects.create(**obj.cleaned_data)
  16. return redirect('/login/')
  17. return render(request,'registered.html',{'mgs':'俩次密码不一致!'})
  18. return render(request, 'registered.html', {'obj': obj})
  19. return render(request, 'registered.html', {'msg':'验证码错误!'})
  20.  
  21. def Avatars(request):
  22. path = request.FILES.get('fafafa')
  23. paths = os.path.join('static', path.name)
  24. print(paths)
  25. path_lis.append(paths)
  26. with open(paths, 'wb') as f:
  27. for chunk in path.chunks():
  28. f.write(chunk)
  29. return HttpResponse(paths)

用户注册 views

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
  7. <style>
  8. .login{
  9. width: 600px;
  10. margin: 0 auto;
  11. padding: 20px;
  12. margin-top: 90px;
  13. }
  14. .hide{
  15. display: none;
  16. }
  17. img{
  18. margin-top: -55px;
  19. margin-left: 272px;
  20. width: 80px;
  21. height: 80px;
  22. }
  23. .files{
  24. position: absolute;
  25. left: 780px;
  26. top: 440px;
  27. }
  28. .zhuce{
  29. margin-top: 11px;
  30. }
  31. .imgs{
  32. width: 120px;
  33. height: 30px;
  34. margin-left: 1px;
  35. margin-top: 1px;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <div class="login">
  41. <form id="f1" class="form-horizontal" method="POST" action="/registered/" enctype="multipart/form-data">
  42. {% csrf_token %}
  43. <div id="container3" class="imgs"></div>
  44. <div class="form-group">
  45. <label class="col-sm-2 control-label">用户名</label>
  46. <div class="col-sm-10">
  47. <input type="text" class="form-control" placeholder="用户名" name="username">{{ obj.errors.username.0 }}
  48. </div>
  49. </div>
  50. <div class="form-group">
  51. <label class="col-sm-2 control-label">昵名</label>
  52. <div class="col-sm-10">
  53. <input type="text" class="form-control" placeholder="昵名" name="nickname">{{ obj.errors.nickname.0 }}
  54. </div>
  55. </div>
  56. <div class="form-group">
  57. <label class="col-sm-2 control-label">邮箱</label>
  58. <div class="col-sm-10">
  59. <input type="text" class="form-control" placeholder="邮箱" name="email">{{ obj.errors.email.0 }}
  60. </div>
  61. </div>
  62. <div class="form-group">
  63. <label class="col-sm-2 control-label">密码</label>
  64. <div class="col-sm-10">
  65. <input type="password" class="form-control" placeholder="密码" name="password">{{ obj.errors.password.0 }}
  66. </div>
  67. </div>
  68. <div class="form-group">
  69. <label class="col-sm-2 control-label">确认密码</label>
  70. <div class="col-sm-10">
  71. <input type="password" class="form-control" placeholder="确认密码" name="pwds">{{ obj.errors.pwds.0 }}{{ mgs }}
  72. </div>
  73. </div>
  74. <div class="form-group">
  75. <label class="col-sm-2 control-label">验证码</label>
  76. <div class="col-sm-5">
  77. <input type="text" class="form-control" placeholder="验证码" name="yzm">
  78. {{ msg }}
  79.  
  80. </div>
  81. <div class="col-sm-5">
  82. <img style="width: 120px;height: 30px;" src="/check_code/" class="imgs">
  83. &nbsp,&nbsp;
  84. <a href="/registered/">更换验证码</a>
  85. </div>
  86. </div>
  87.  
  88. <div class="form-group">
  89. <div class="col-sm-offset-2 col-sm-10">
  90. <input type="button" onclick="zhuce()" class="btn btn-default zhuce" value="注册" />
  91. </div>
  92.  
  93. </div>
  94. </form>
  95. </div>
  96. <div>
  97. <form id="f2" class="form-horizontal" method="POST" action="/Avatars/" target="ifr" enctype="multipart/form-data">
  98. {% csrf_token %}
  99. <div>
  100. <iframe class="hide" src="/Avatars/" name="ifr" id="ifr" frameborder=""></iframe>
  101. <input type="file" name="fafafa" id="fafafa" class="files">
  102. </div>
  103. </form>
  104.  
  105. </div>
  106. <script src="/static/jquery-3.2.1.js"></script>
  107. <script>
  108. function zhuce() {
  109. $('#f1').submit()
  110. }
  111.  
  112. $('#fafafa').change(function () {
  113. document.getElementById('ifr').onload=Isitsgs;
  114. $('#f2').submit()
  115. });
  116.  
  117. function Isitsgs() {
  118. var content =document.getElementById('ifr').contentWindow.document.body.innerText;
  119. {#查找idifr的标签,的window内容的请求体的文本信息#}
  120. var tag = document.createElement('img');
  121. {#创建一个img标签并设置标签名字是tag#}
  122. tag.src='/'+content;
  123. {#找到名字是tag标签设置路径#}
  124. $('#container3').append(tag);
  125. {#找到id container3的标签添加一个名字是tag的标签tag#}
  126. }
  127. </script>
  128. </body>
  129. </html>

用户注册 html

  1. def bokes(request,user):
  2. if request.method=='GET':
  3. userss = models.UserInfo.objects.filter(username=user,).values(
  4. 'avatar',
  5. 'username',
  6. 'blog__article__title',
  7. 'blog__article__comment',
  8. 'blog__article__summary',
  9. 'blog__article__comment_count',
  10. 'blog__article__up_count',
  11. 'blog__tag__title',
  12. 'blog__category__title',
  13. 'blog__tag__article2tag',
  14. )
  15. print(userss[0]['avatar'])
  16. # request.session['centen']={'k':'v'}
  17. article_list = models.UserInfo.objects.filter(username=user).count()
  18. page_info = PageInfo(request.GET.get('page'), article_list, 10, '/home.html', 11)
  19. # print(page_info.start())
  20. article_list = models.UserInfo.objects.filter(username=user)[
  21. page_info.start():page_info.end()]
  22. # return redirect('/boke/')
  23. print(userss[0]['blog__tag__article2tag'])
  24. return render(request,'bokes.html',{
  25. 'touxiang':userss[0]['avatar'],
  26. 'a_list':userss,
  27. 'article_list': article_list,
  28. 'page_info':page_info,
  29. 'tag':userss[0]['blog__tag__title'],
  30. # 'tag_count':userss[0]['blog'],
  31. 'category':userss[0]['blog__category__title'],
  32.  
  33. })

用户个人主页 views

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css" />
  7. <link rel="stylesheet" href="/static/plugins/font-awesome-4.7.0/css/font-awesome.css" />
  8. <link rel="stylesheet" href="/static/css/commons.css"/>
  9. <style>
  10. .touxiang{
  11. width:48px;
  12. height: 48px;
  13. border-radius: 50%;
  14. } .container{
  15. width: auto;
  16. height:auto;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <nav class="navbar navbar-default no-radius">
  22. <div class="container">
  23. <!-- Brand and toggle get grouped for better mobile display -->
  24. <div class="navbar-header">
  25. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
  26. <span class="sr-only">Toggle navigation</span>
  27. <span class="icon-bar"></span>
  28. <span class="icon-bar"></span>
  29. <span class="icon-bar"></span>
  30. </button>
  31. <a class="navbar-brand a1" href="#">老子的技术论坛</a>
  32. </div>
  33.  
  34. <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
  35. <ul class="nav navbar-nav">
  36. {% if type_id %}
  37. <li><a class="a1" href="/">全部</a></li>
  38. {% else %}
  39. <li><a class="active" href="/">全部</a></li>
  40. {% endif %}
  41. {% for item in type_choice_list %}
  42. {% if item.0 == type_id %}
  43. <li class="active"><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  44. {% else %}
  45. <li><a class="a1" href="/boke/{{ item.0 }}/">{{ item.1 }}</a></li>
  46. {% endif %}
  47. {% endfor %}
  48. </ul>
  49. {% if request.session.users %}
  50. <ul class="nav navbar-nav navbar-right">
  51. <li><a class="a1" href="/boke/{{ request.session.users.users }}.html">我的博客</a></li>
  52. <li><a class="a1" href="#">{{ request.session.users.users }}</a></li>
  53. <li><a class="a1" href="/user_out/">注销</a></li>
  54. <li><img class="touxiang" src="{{ request.session.users.touxiang }}"></li>
  55. </ul>
  56. {% else %}
  57. <ul class="nav navbar-nav navbar-right">
  58. <li><a class="a1" href="/login/"> 登录</a></li>
  59. <li><a class="a1" href="/registered/">注册</a></li>
  60. <li><img class="touxiang" src="{{ touxiang }}"></li>
  61. </ul>
  62. {% endif %}
  63. </div>
  64. </div>
  65. </nav>
  66. <div>
  67.  
  68. <div class="container">
  69. <div class="col-md-2">
  70. <ul>
  71. <li>{{ tag }}{{ tag_count }}</li>
  72. <li>{{ category }}</li>
  73. </ul>
  74. </div>
  75. <div class="col-md-7">
  76. <div class="article-list">
  77. <div class="article-item">
  78. {% for row in a_list %}
  79. <div><a class="a1">{{ row.blog__article__title }}</a></div>
  80. <div class="art-body clearfix">
  81. <a><img class="left a1" src="{{ row.avatar }}"></a>
  82. <a class="a1">{{ row.blog__article__summary }}</a>
  83. </div>
  84. <a class="a1">
  85. <p><i class="fa fa-user-o" aria-hidden="true"></i>
  86. {{ row.username }} 发布于 2017-07-10
  87. <i class="fa fa-commenting-o" aria-hidden="true"></i>
  88. {{ row.blog__article__comment_count }}
  89. <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
  90. {{ row.blog__article__up_count }}
  91. </p>
  92.  
  93. <hr style="border:0.5px dotted darkgray"/>
  94. </a>
  95. {% endfor %}
  96. <nav aria-label="Page navigation">
  97. <ul class="pagination">
  98. {{ page_info.pager|safe }}
  99. </ul>
  100. </nav>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="col-md-3">
  105. <div class="panel panel-default">
  106. <div class="panel-heading">Panel heading without title</div>
  107. <div class="panel-body">
  108. <p>人生若只如初见,何事秋风悲画扇</p>
  109. <p>等闲变却故人心,却道故人心易变</p>
  110. <p>骊山语罢清宵半,泪雨霖铃终不怨</p>
  111. <p>何如薄幸锦衣郎,比翼连枝当日愿</p>
  112. </div>
  113. </div>
  114. <div class="panel panel-default">
  115. <div class="panel-heading">Panel heading without title</div>
  116. <div class="panel-body">
  117. <p>十年生死两茫茫,不思量,自难忘</p>
  118. <p>千里孤坟,无处话凄凉</p>
  119. <p>纵使相逢应不识,尘满面,鬓如霜</p>
  120. <p>夜来幽梦忽还乡,小轩窗,正梳妆</p>
  121. <p>相顾无言,惟有泪千行</p>
  122. <p>料得年年肠断处,明月夜,短松冈</p>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. </div>

用户个人主页.html

python 保障系统(一)的更多相关文章

  1. python 报障系统(完)

    python 报障系统(完) 一.报障系统原理: 原理: 1. 简单管理 2. 角色多管理(权限) a. 登录 session放置用户信息(检测是否已经登录) session放置权限信息(检测是否有权 ...

  2. Python云端系统开发入门——框架基础

    Django框架基础 这是我学习北京理工大学嵩天老师的<Python云端系统开发入门>课程的笔记,在此我特别感谢老师的精彩讲解和对我的引导. 1.Django简介与安装 Django是一个 ...

  3. Python云端系统开发入门 pycharm代码

    html <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title& ...

  4. 【转】Python之系统交互(subprocess)

    [转]Python之系统交互(subprocess) 本节内容 os与commands模块 subprocess模块 subprocess.Popen类 总结 我们几乎可以在任何操作系统上通过命令行指 ...

  5. python获取系统内存占用信息的实例方法

    psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控, ...

  6. 举例讲解Linux系统下Python调用系统Shell的方法

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:1. os 模块 ...

  7. 一个简单的python选课系统

    下面介绍一下自己写的python程序,主要是的知识点为sys.os.json.pickle的模块应用,python程序包的的使用,以及关于类的使用. 下面是我的程序目录: bin是存放一些执行文件co ...

  8. Python之系统交互(subprocess)

    本节内容 os与commands模块 subprocess模块 subprocess.Popen类 总结 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell ...

  9. python 选课系统

    couser.py: import sys,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.pa ...

随机推荐

  1. Ubuntu14.04上修改主机名

    Ubuntu14.04上修改主机名 author:headsen chen  2017-10-12 15:41:31 个人原创,转载请注明作者,出处,否则依法追击法律责任 查看主机名:hostname ...

  2. 制作centos的启动盘

    制作centos的U盘启动盘 author:headsen chen    2017-10-13   10:24:50  个人原创,允许转载,请注明作者,出处,否则依法追究法律责任! 1,下载Ultr ...

  3. Java测试(一)

    关于while和do-while循环,下列说法正确的是  A 两种循环除了格式不同外,功能完全相同  B 与do-while语句不通的是,while语句的循环至少执行一次  C do-while语句首 ...

  4. Pick up lines搭讪

    1.In a bar Do you come here often? I've never seen you here before. What do you think of this bar? A ...

  5. Spring AOP: 织入的顺序

    spring AOP 采用和 AspectJ 一样的优先顺序来织入增强处理:在进入连接点时,高优先级的增强处理将先被织入:在退出连接点时,高优先级的增强处理会后被织入. 当不同的切面里的两个增强处理需 ...

  6. Spring事务管理—aop:pointcut expression解析(转)

    本文转载自: http://hane00.blog.163.com/blog/static/160061522011427473965/ 先来看看这个spring的配置文件的配置: <!-- 事 ...

  7. java.lang的详细解读

    软件包    java.lang 提供java编程语言实现程序设计的基础类 接口摘要 1> appendable  提供被添加char序列和值的对象 2>charSquence char值 ...

  8. 配置Hibernate的二级缓存

    1.在applicationContex.xml文件里面添加二级缓存配置: <!-- 配置hibernate的sessionFactory --> <bean id="se ...

  9. oracle中事务处理--事务隔离级别

    概念:隔离级别定义了事务与事务之间的隔离程度. ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而以,不同的数据库在实现时有所不同). 隔离级别 脏读 ...

  10. 2017-2018-1 Java演绎法 第三周 作业

    团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...