之前将网站一些该有的元素都准备完成了。接下来就是关于用户注册和后台admin设置。

user模块

关于一个网站的浏览量是靠用户的数量来决定的。所以每一个用户在网站的操作,要做出限制。这个是可以实现的。接着还有一些个人的账号和数据信息可以完善,让管理员能更好的管理。

#user的urls模块from django.urls import path
from . import viewsurlpatterns = [#用户的注册和登陆path('login.html', views.loginView, name='login'),#用户登录中心path('home/<int:page>.html', views.homeView, name='home'),#退出用户登陆path('logout.html', views.logoutView, name='logout'),
]#两个html文件已经放到之前的文件下载中------------------------------------------------------------------------------------------------
#user的models模块from django.db import models
from django.contrib.auth.models import AbstractUserclass MyUser(AbstractUser):qq = models.CharField('QQ号码', max_length=20)weChat = models.CharField('微信账号', max_length=20)mobile = models.CharField('手机账号', max_length=11, unique=True)#设置返回值def __str__(self):return self.username#这里与之前数据库的建立连接是一个意思,此时需要将之前库内所有表删除(建议先导出数据保存),在将这个执行
#python manage.py makemigrations和python manage.py migrate 两个指令操作------------------------------------------------------------------------------------------------
#user的forms模块
from django.contrib.auth.forms import UserCreationForm
from .models import MyUser
from django import forms#定义MyUser的数据表单,用于用户注册
class MyUserCreationForm(UserCreationForm):#重写初始化函数,设置自定义字段password1和password2的样式和属性def __init__(self, *args, **kwargs):super(MyUserCreationForm, self).__init__(*args, **kwargs)self.fields['password1'].widget = forms.PasswordInput(attrs={'class':'txt tabInput', 'placeholder':'密码,4-16位数字/字母。特殊符号(空格除外)'})self.fields['password2'].widget = forms.PasswordInput(attrs={'class':'txt tabInput', 'placeholder':'重复密码'})class Meta(UserCreationForm.Meta):model = MyUser#在注册界面添加模型字段:手机号码和密码fields = UserCreationForm.Meta.fields + ('mobile',)#设置模型字段的样式和属性(widgets)widgets = {'mobile':forms.widgets.TextInput(attrs={'class':'txt tabInput','placeholder':'手机号'}),'username':forms.widgets.TextInput(attrs={'class':'txt tabInput','placeholder':'用户名'}),}#实现用户的注册和登陆之前,除了自定义用户模型MyUser之外,还需要定义用户注册的表单类。#这里通过重写Django中的内置表单类UserCreationForm------------------------------------------------------------------------------------------------
#user的views模块
from django.shortcuts import render, redirect
from django.db.models import Q
from index.models import Dynamic
from user.models import *
from django.contrib.auth import login, logout
from django.contrib.auth.hashers import check_password
from .form import MyUserCreationForm
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger#用户注册与登录
def loginView(request):#表单对象useruser = MyUserCreationForm()#表单提交if request.method == 'POST':#判断表单提交是     用户登陆     还是       用户注册#用户登陆if request.POST.get('loginUser', ''):#获取搜索内容如果为loginUser,没有返回空loginUser = request.POST.get('loginUser', '')#这里是已经获取到用户输入的password = request.POST.get('password', '')if MyUser.objects.filter(Q(mobile = loginUser) | Q(username=loginUser)):user = MyUser.objects.filter(Q(mobile=loginUser) | Q(username=loginUser)).first()#这里是sql语句在django中的不同表示方法if check_password(password, user.password):login(request, user)return redirect('/user/home/1.html')#页面跳转else:tips = '密码错误'else:tips = '用户不存在'#用户注册else:user = MyUserCreationForm(request.POST)if user.is_valid():user.save()tips = '注册成功'else:if user.errors.get('username', ''):tips = user.errors.get('username', '注册失败')else:tips = user.errors.get('mobile', '注册失败')return render(request, 'login.html', locals())#用户中心
#设置用户登录限制
@login_required(login_url='/user/login.html')
def homeView(request, page):#热搜歌曲search_song = Dynamic.objects.select_related('song').order_by('-dynamic_search').all()[:4]#分页功能song_info = request.session.get('play_list', [])paginator = Paginator(song_info, 3)try:#错误解决方法contacts = paginator.page(page)except PageNotAnInteger:contacts = paginator.page(1)except EmptyPage:contacts = paginator.page(paginator.num_pages)return render(request, 'home.html', locals())def logoutView(request):logout(request)return redirect('/')

在上面的代码中涉及到了表单类这么一个概念。

在这里要说明以下,表单是搜集用户数据信息的各种表单元素的集合,作用是实现网页上的数据交互,用户在网站输入数据信息,然后提交到网站服务器端进行处理

表单我们学过html的知道,定义一个类似下拉菜单的样式,在这个项目中是先利用了内置表单类,然后重写了两个新功能。

1、添加用户注册的字段,在Meta类对fields属性设置字段即可,添加的字段必须是模型字段并且以元组或列表的形式添加

2、设置字段的CSS格式,设置表单字段mobile、username、password1、password2的attrs属性。其中mobile和username是模型MyUser的字段,所以在Meta类中重写widgets属性。widgets是内置表单类的一个参数,两个密码password是额外定义的表单字段,所以重写初始函数__init__可以实现字段样式设置

这里对表单说的有点多,因为在网站中,用户注册是一个非常重要的环节。而且表单这里还是涉及到了前端的知识…原谅本小白不才…实在能力有限。

至此除了后台系统之外,基本全部完成。上几个截图看看吧





接下来就是后台系统了…

Django建立一个音乐网站(四)相关推荐

  1. Django建立一个音乐网站(三)

    Django+mysql连接成功之后,就是我们对网页设计了. 但我并不擅长html的一些前端,不做多的描述-因此将这些html文件和静态文件,打包提供大家参考. 点击下载 这个是数据文件,静态文件,h ...

  2. Django建立一个音乐网站(一)

    Django是python学习的一个分支.最近跟着书上在学习.关于书上的项目我觉得拿来练手非常合适.而且涉及了数据库,html相关知识,对程序员的学习关联性我觉得还是有很大的提升的. 根据<玩转 ...

  3. 运用简单的HTML、CSS建立一个音乐网站模板

    项目已开源 如需代码请在码云或者github上下载 请私信或评论联系我 码云: GitHub: 请下载后在码云.GitHub上点击star或者follow,您的关注是对我最大的支持! 代码节选如下如下 ...

  4. 音乐网站购买服务器,怎么样去做一个音乐网站

    虽然现在音乐网站的压力很大,因为服务器费用,同类竞争激烈和版权问题,但还是有许多站长跃跃欲试.今天告诉大家做一个音乐网站的大致流程和方法. 做音乐网这种网站有三个基本的: 1.首先版权问题. 要做大必 ...

  5. 自己如何建立一个公司网站?公司网站建设策划书怎么写?

    如何建立一个公司网站?对于一个新手来说建立一个公司网站,虽然步骤看起来很简单,但是实际操作起来,不是那么容易把网站做好的.想快速建网站只需要找准自己的需求,按照流程操作就很方便快捷.建网站之前需要准备 ...

  6. 独立开发变现周刊(第78期):建立一个佣金网站,每月赚4万美元

    分享独立开发.产品变现相关内容,每周五发布. (合集:https://www.ezindie.com/weekly ) 目录 1.Jobboardsearch: 面向全世界的公开招聘网站 2.Hove ...

  7. 音乐网站要什么服务器,告诉你怎么样去做一个音乐网站

    虽然现在音乐网站的压力很大,因为服务器费用,同类竞争激烈和版权问题,但还是有许多站长跃跃欲试.今天告诉大家做一个音乐网站的大致流程和方法. 做音乐网这种网站有三个基本的: 1.首先版权问题. 要做大必 ...

  8. html中使用什么标签做的导航栏_自媒体人如何自己建立一个手机网站,超简单,任何人都能做...

    随着移动互联网的兴起,越来越多的公司.个人把展示的内容转到了手机网站上,学会制作手机网站就成了大家关注的热点.传统的网页制作工具制作电脑端的网站功能很强大,但手机网站由于手机屏幕大小和CPU处理能力较 ...

  9. 首席技术官_当首席技术官决定建立一个婚礼网站时

    首席技术官 一个由Django支持的开源,响应式婚礼网站和邀请+来宾管理系统,具有250多个提交,单元测试等. (An open-source, responsive, Django-powered ...

最新文章

  1. php表单的输出,php – Joomla输入表单字段输出
  2. 21. Matlab中的Live scrip ---实时脚本
  3. 【Java并发编程】—–“J.U.C”:ConcurrentLinkedQueue
  4. 用命令行执行ROBOT FRAMEWORK
  5. Python_异常和模块
  6. 诡异的json包含bom头
  7. (3)Deep Learning之神经网络和反向传播算法
  8. wamp环境下php命令运行时出现错误:无法启动此程序,因为计算机中丢失OCI.dll。尝试重新安装该程序以解决此问题...
  9. 输入两个整数,求他们相除的余数
  10. matlab legend分栏,word排版技巧
  11. 【Unity】替换场景、Prefab字体 工具类
  12. 修改输入框placeholder文字样式(颜色、字号等)
  13. 修改Cisco交换机ntp服务器,Cisco交换机NTP的配置
  14. 无法回避的现实问题:“亲对象”也要明算账?
  15. 尚硅谷周阳学习微服务《二》
  16. 将word转换html格式的文件,word 保存成 html格式文件
  17. 7-2 冒泡法排序之过程 (15分)
  18. Symbian UIQ简介
  19. 阴天(唐伯虎点秋香版)3铃声 阴天(唐伯虎点秋香版)3手机铃声免...
  20. Python小程序(7)输出国际象棋盘

热门文章

  1. 【Java语言】初级编程入门 2的n次方
  2. 【Java+JSP+MySql】12306购票系统(三)JDBC
  3. 电子器件系列七:看门狗
  4. 张一鸣:10年面试2000人,我发现混的好的人,全都有这5种特质
  5. Android应用Preference相关及源码浅析(Preference组件家族篇)
  6. 区块链共识算法之POW
  7. 设计模式【14】——策略模式( Strategy 模式)
  8. 住宅防雷接地的选择要求和施工方法
  9. html中的空格符号( nbsp; ensp; emsp; )介绍以及中文对齐实现的方法详解
  10. rockchip 修改开机LOGO和注意事项