简体   繁体   中英

Expected string or buffer Django

I've run into a wall while make an application. I can log into my home page but I run into the "Expected strong or buffer" . I found the error on line 16 of my views

today=Appointment.objects.order_by('date').filter(date=now,user=user)

I've done multiple things to fix this to no avail. views:

#-*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render, redirect
from .models import User,Appointment
from datetime import datetime
from django.contrib import messages
import bcrypt

# Create your views here.
def index(request):            
    return render(request,'index.html')

def home(request):
    now=datetime.now().strftime("%Y-%m-%d"),
    user =User.objects.get(id=request.session['user_id'])
    today=Appointment.objects.order_by('date').filter(date=now,user=user)
    laterdate=Appointment.objects.order_by('date').filter(user=user).exclude(date=now)
    context={
    'user':user,
    'laterdate':laterdate,
    'today':today,
    }
    return render(request,"welcome.html",context,now)

def register(request):
    errors = User.objects.validate(request.POST)
    #print 'this process works', request.POST
    if len(errors) > 0:
        for error in errors:
            messages.error(request, error)
        return redirect("/")

    else:
        hashpwd = bcrypt.hashpw(request.POST["password"].encode(), bcrypt.gensalt())
        newuser = User.objects.create(
            first_name=request.POST['first_name'],
            last_name=request.POST['last_name'],
            email=request.POST['email'],
            password=hashpwd)

        request.session['user_id'] = newuser.id
        request.session['name'] = newuser.first_name
        print "session info", newuser.id, newuser.first_name
        return redirect("/home")

def login(request):
    errors = User.objects.loginvalidate(request.POST)
    if len(errors) > 0:
        for error in errors:
            messages.error(request, error)
        return redirect("/")
    else:
        user = User.objects.filter(email=request.POST['email'])[0]
        request.session['user_id'] = user.id
        request.session['name'] = user.first_name
        return redirect("/home")

def logout(request):
    request.session.clear()
    print 'goodbye'
    return redirect('/')
def delete(request,id):
    Appointment.objects.get(id=id).delete()
    return redirect('/home')

def edit(request):
    appointment=Appointment.objects.get(id=id)
    context={
        'edit':appointment
    }
    return render(request,"update.html",context)

def create(request):
    errors=Appointment.objects.appointvalidate(request.POST)
    if len(errors)>0:
        for error in errors:
            messages.error(request,error)
        return redirect("/home")
    else:
        users = User.objects.get(id = request.session['user_id'])
        Appointment.objects.create(
           task=request.POST["task"],
           time=request.POST["time"],
           date=request.POST["date"],
           status="pending",
           key=users,
        )
        return redirect("/home")

def update(request,id):
    errors=Appointment.objects.appointvalidate(request.POST)
    if errors['status']==True:
        update=Appointment.objects.get(id=id)
        update.task=request.POST['task']
        update.time=request.POST['time']
        update.date=request.POST['date']
        update.status=request.POST['status']
        update.save()
        return redirect("/home")
    else:
        for error in errors:
            messages.error(request,error)
        return redirect("/update")   

Models:

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models
    import bcrypt
    import re
    from datetime import *
    import datetime
    EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$')
    NAME_REGEX = re.compile(r'^[aA-zZ\s]+$')

    # Create your models here.



    class UserManage(models.Manager):
        def validate(self, postData):
            errors = {}
            if len(postData['first_name']) < 2:
                errors["First name field can be left blank"]="first_name"
            elif not NAME_REGEX.match(postData['first_name']):
                errors["This is not a valid first name. Try again."]="first_name"

            if len(postData['last_name']) < 2:
                errors["Last name cannot be left blank"]="last_name"

            elif not NAME_REGEX.match(postData['last_name']):
                errors["This is not a valid last name. Try again."]="last_name"


            if len(postData['email']) < 1:
                errors["Email cannot be left blank"]="email"

            elif not EMAIL_REGEX.match(postData['email']):
                errors["this is not a valid email try again"]="email"

            if (User.objects.filter(email=postData['email'])):
                errors['Email already in use']="email"
            print postData["email"]


            if len(postData['password']) < 8:
                errors["Passwords must at least 8 characters"]="password"

            if postData["password"] != postData["cpassword"]:
                errors["Passwords do not match"]="cpassword"
            return errors

        def loginvalidate(self, postData):
            errors = {}
            if len(postData['email'])<1:
                errors["Email field can not be blank"] = "email"

            if len(postData["password"])<8:
                errors["Password must be at least 8 characters" ] = "password"

            if len(self.filter(email=postData['email']))>0:
                #print 'TRUE for emails'
                currentuser =self.filter(email=postData['email'])[0]
                existingpwd = currentuser.password

                if not bcrypt.checkpw(postData["password"].encode(), existingpwd.encode()):
                        errors["Password does not match"] = "password"
            else:
                errors["Email does not match"] = "email" 
            return errors

    class AppointmentManage(models.Manager):
        def appointvalidate(self,postData):
            errors={}
            if len(postData['task'])<2:
                errors["Task field cannot be left blank"]="task"
            if len(postData['task'])<20:
                errors["Task field is too long"]="task"
            if len(postData['date'])<1:
                errors["Date field cannot be left blank"]="date"
            else:
                pause=datetime.strptime(time,"%Y-%m-%d %H:%M")
                if pause< datetime.now():
                    errors["Only present and future dates are permissable"]="date"
            if len(postData['time'])<1:
                errors["Time field cannot be left blank"]="time"
            return errors

        def sorter(self):
            return (self.all().order_by('-date'))

    class User(models.Model):
        first_name = models.CharField(max_length=45)
        last_name = models.CharField(max_length=45)
        email = models.CharField(max_length=45)
        password = models.CharField(max_length=45)
        birthdate = models.DateField(auto_now=True)
        objects = UserManage()

    class Appointment(models.Model):
        date=models.DateField(auto_now=True)
        status=models.CharField(max_length=20)
        time=models.TimeField()
        task=models.CharField(max_length=20)
        key=models.ForeignKey(User,related_name="other")
        objects=AppointmentManage()
        def current_day(self):
            # return date.today().strftime("%Y-%m-%d") == self.date
            return {'date': datetime.now()}

Html Page:

    <DOCTYPE html>
        <html>
            <head> <link rel="stylesheet" type="text/css" href="style.css">
                {% load static %}
             </head><body>
    <h1>Welcome{{request.session.name}} </h1>
    <a href="/logout"><button>logout</button></a>
    <h1>Here are your

 appointments for {{request.session.datetime}}</h1>
    <table>
        <thead><th>Task</th><th>Date</th><th>Time</th> <th>Status</th> <th>Actions</th></thead>
        {%for meeting in today%}
        <tr><td>{{meeting.task}}</td><td>{{meeting.date}}</td><td>{{meeting.time}}</td><td>{{meeting.status}}</td><td><a href="/edit"><button>Edit</button></a></td><td><a href="/delete"><button>Delete</button></a></td></tr>
        {%endfor%}
    </table>

<p>Other appointments</p>
<table>
    <thead><th>Task</th><th>Date</th><th>Time</th></thead>
    {%for meeting in laterdate%}
    <tr><td>{{meeting.task}}</td><td>{{meeting.date}}</td><td>{{meeting.time}}</td></tr>
    {%endfor%}
</table>

<h2>Add a new Appointment</h2>
<form action="/create" method="POST">
{% csrf_token %} 
<label for="task">
<p>Task:</p> <input type="text" name="task">
</label>
<label for="time">
<p>Time:</p><input type="time" name="time" id="">
</label>
<label for="date">
<p>Date</p><input type="date" name="date" id="">
</label>
<button type="submit">Submit</button>
<br>
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}
</form>
</body>

try:

from datetime import datetime
today=Appointment.objects.order_by('date').filter(date=datetime.today(), user=user)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM