Beispiel #1
0
def login(request):
    if request.method == 'POST':
        try:
            username = request.POST.get("username")
            password = request.POST.get("password")
            users = models.User.objects.filter(username=username)
            if len(username) == 0 or len(users) == 0:
                res = {"error": "no such a user"}
                return HttpResponse(json.dumps(res))
            if users[0].password != password:
                res = {"error": "password is wrong"}
                return HttpResponse(json.dumps(res))
            if users[0].session_id != "0":
                res = {"error": "has logged in"}
                return HttpResponse(json.dumps(res))
            session = ''.join(
                random.sample(string.ascii_letters + string.digits, 16))
            models.User.objects.filter(username=username).update(
                session_id=session)
            res = {"user": username}
            response = HttpResponseRedirect('homepage')
            response["Set-Cookie"] = "session_id=" + session
            response.write(json.dumps(res))
            return response
            #, render_to_response('homepage.html')
        except:
            res = {"error": "wrong"}
            return HttpResponse(content=json.dumps(res), status=200)
    else:
        res = {"error": "wrong"}
        return HttpResponse(content=json.dumps(res), status=200)
def drawGroup(request, adjlist, format='png'):
    """
    Returns an image of the provided adjacency list `adjlist` for a molecular
    group.  urllib is used to quote/unquote the adjacency list.
    """
    from rmgpy.molecule.group import Group
    from rmgpy.molecule.adjlist import InvalidAdjacencyListError

    adjlist = str(urllib.unquote(adjlist))

    try:
        group = Group().fromAdjacencyList(adjlist)
    except (InvalidAdjacencyListError, ValueError):
        response = HttpResponseRedirect(static('img/invalid_icon.png'))
    else:
        if format == 'png':
            response = HttpResponse(content_type="image/png")
            response.write(group.draw('png'))
        elif format == 'svg':
            response = HttpResponse(content_type="image/svg+xml")
            svgdata = group.draw('svg')
            # Remove the scale and rotate transformations applied by pydot
            svgdata = re.sub(r'scale\(0\.722222 0\.722222\) rotate\(0\) ', '', svgdata)
            response.write(svgdata)
        else:
            response = HttpResponse('Image format not implemented.', status=501)

    return response
Beispiel #3
0
def logout(req):
    #response = HttpResponse('退出成功!!')
    response = HttpResponseRedirect('/login/')
    #清理cookie里保存username
    response.delete_cookie('username')
    response.write("<script>window.location='/login/'</script>")
    return response
Beispiel #4
0
def drawGroup(request, adjlist, format='png'):
    """
    Returns an image of the provided adjacency list `adjlist` for a molecular
    group.  urllib is used to quote/unquote the adjacency list.
    """
    from rmgpy.molecule.group import Group
    from rmgpy.molecule.adjlist import InvalidAdjacencyListError

    adjlist = urllib.parse.unquote(adjlist)

    try:
        group = Group().from_adjacency_list(adjlist)
    except (InvalidAdjacencyListError, ValueError):
        response = HttpResponseRedirect(static('img/invalid_icon.png'))
    else:
        if format == 'png':
            response = HttpResponse(content_type="image/png")
            response.write(group.draw('png'))
        elif format == 'svg':
            response = HttpResponse(content_type="image/svg+xml")
            svg_data = group.draw('svg')
            # Remove the scale and rotate transformations applied by pydot
            svg_data = re.sub(r'scale\(0\.722222 0\.722222\) rotate\(0\) ', '',
                              svg_data)
            response.write(svg_data)
        else:
            response = HttpResponse('Image format not implemented.',
                                    status=501)

    return response
Beispiel #5
0
def drawMolecule(request, adjlist, format='png'):
    """
    Returns an image of the provided adjacency list `adjlist` for a molecule.
    urllib is used to quote/unquote the adjacency list.
    """
    import io
    from rmgpy.molecule import Molecule
    from rmgpy.molecule.draw import MoleculeDrawer
    from rmgpy.molecule.adjlist import InvalidAdjacencyListError

    adjlist = urllib.parse.unquote(adjlist)

    try:
        molecule = Molecule().from_adjacency_list(adjlist)
    except (InvalidAdjacencyListError, ValueError):
        response = HttpResponseRedirect(static('img/invalid_icon.png'))
    else:
        if format == 'png':
            response = HttpResponse(content_type="image/png")
            surface, _, _ = MoleculeDrawer().draw(molecule, file_format='png')
            response.write(surface.write_to_png())
        elif format == 'svg':
            response = HttpResponse(content_type="image/svg+xml")
            svg_data = io.BytesIO()
            MoleculeDrawer().draw(molecule, file_format='svg', target=svg_data)
            response.write(svg_data.getvalue())
        else:
            response = HttpResponse('Image format not implemented.',
                                    status=501)

    return response
Beispiel #6
0
class LogoutView(PutView):
    http_method_names = [
        'post',
    ]

    def __init__(self):
        self.res = HttpResponse(content_type='application/javascript')

    def post(self, request):
        logout(request)

        if 'application/json' in request.META['CONTENT_TYPE']:
            self.res.write(json.dumps({
                'logged_out': True,
            }))
        else:
            self.res = HttpResponseRedirect(reverse('home'))

        self.res.delete_cookie('sessionid')
        return self.res
Beispiel #7
0
class LogoutView(PutView):
    http_method_names = ['post',]

    def __init__(self):
        self.res = HttpResponse(content_type='application/javascript')
    
    def post(self, request):
        logout(request)
        
        if 'application/json' in request.META['CONTENT_TYPE']:
            self.res.write(json.dumps(
                {
                    'logged_out' : True,
                }
            ))
        else:
            self.res = HttpResponseRedirect(reverse('home'))
        
        self.res.delete_cookie('sessionid')
        return self.res
Beispiel #8
0
def ShortUrlHandler(request, ident, usuario=None):

    if request.method == 'GET':

        miId = int(ident, BASE_CONVERSION)
        llave = ndb.Key('ShortUrlM', miId)
        modelo = llave.get()
        urlredireccion = '/'
        if (modelo is not None):
            urlredireccion = modelo.theurl
        response = HttpResponseRedirect(urlredireccion)
        #response = HttpResponse("", content_type='application/json', status=200)
        #response.write(simplejson.dumps(comun.to_dict(modelo)))
        return response
    elif request.method == 'POST':
        response = HttpResponse("",
                                content_type='application/json',
                                status=200)
        peticion = simplejson.loads(request.raw_post_data)
        theurl = peticion['theurl']

        ans = {}
        ans['error'] = 0
        ans['theurl'] = theurl
        #Primero toca hacer la prueba de si existe previamente la url larga
        temporal = ndb.gql('SELECT * FROM ShortUrlM WHERE theurl = :1', theurl)
        datos, next_cursor, more = temporal.fetch_page(1)
        if (len(datos) > 0):
            #Ya existe y no lo debo crear
            ans['id'] = str_base(datos[0].key.id(), BASE_CONVERSION)
        else:
            #Se debe crear
            unaurl = ShortUrlM(theurl=theurl)
            unaurl.put()
            ans['id'] = str_base(unaurl.key.id(), BASE_CONVERSION)
        response.write(simplejson.dumps(ans))
        return response
Beispiel #9
0
class PageResource(PageLikeResource):
    def load(self):
        if self.req.user and not self.req.user.is_anonymous():
            caching.add_recent_email(self.req.user.email)
        page = WikiPage.get_by_path(self.path)
        page.set_cur_user(self.req.user)
        return page

    def get(self, head):
        page = self.load()

        if not page.can_read(self.req.user):
            self._403(page, head)
            return self.res

        if get_restype(self.req, 'html') == 'html' and self.req.GET.get('view', self.default_view) == 'default':
            redirect = page.metadata.get('redirect', None)
            if redirect is not None:
                self.res.location = '/' + WikiPage.title_to_path(redirect)
                self.res.status_code = 303
                return self.res

        representation = self.get_representation(page)
        return representation.respond(self.res, head)

    def post(self):
        page = self.load()

        if not page.can_write(self.req.user):
            self._403(page)
            return

        new_body = self.req.POST['body']
        comment = self.req.POST.get('comment', '')

        view = self.req.GET.get('view', self.default_view)
        restype = get_restype(self.req, 'html')

        # POST to edit form, not content
        if restype == 'html' and view == 'edit':
            if page.revision == 0:
                page.body = new_body
            representation = self.get_representation(page)
            representation.respond(self.res, head=False)
            return

        # POST to content
        try:
            page.update_content(page.body + new_body, page.revision, comment, self.req.user)
            quoted_path = urllib2.quote(self.path.replace(' ', '_'))
            if restype == 'html':
                self.res.location = str('/' + quoted_path)
            else:
                self.res.location = str('/%s?_type=%s' % (quoted_path, restype))
            self.res.status = 303
            self.res['X-Message'] = 'Successfully updated.'
        except ValueError as e:
            html = template(self.req, 'error.html', {
                'page': page,
                'description': 'Cannot accept the data for following reasons',
                'errors': [e.message],
                'suggest_link': ('javascript:history.back();', 'Go back'),
            })
            self.res.status = 406
            self.res['Content-Type'] = 'text/html; charset=utf-8'
            self.res.write(html)
        return self.res

    def put(self):
        page = self.load()

        revision = int(self.req.POST['revision'])
        new_body = self.req.POST['body']
        comment = self.req.POST.get('comment', '')
        preview = self.req.POST.get('preview', '0')
        partial = self.req.GET.get('partial', 'all')

        if preview == '1':
            self.res['Content-Type'] = 'text/html; charset=utf-8'
            page = page.get_preview_instance(new_body)
            html = template(self.req, 'wikipage_bodyonly.html', {
                'page': page,
            })
            self.res.write(html)
            return self.res

        try:
            page.update_content(new_body, revision, comment, self.req.user, partial=partial)
            self.res['X-Message'] = 'Successfully updated.'

            if partial == 'all':
                quoted_path = urllib2.quote(self.path.encode('utf8').replace(' ', '_'))
                restype = get_restype(self.req, 'html')
                if restype == 'html':
                    self.res = HttpResponseRedirect(str('/' + quoted_path))
                else:
                    self.res = HttpResponseRedirect(str('/%s?_type=%s' % (quoted_path, restype)))
                self.res.status_code = 303
            else:
                self.res.status_code = 200
                self.res['Content-Type'] = 'application/json; charset=utf-8'
                self.res.write(json.dumps({'revision': page.revision}))

            return self.res
        except ConflictError as e:
            html = template(self.req, 'wikipage.edit.html', {'page': page, 'conflict': e})
            self.res.status = 409
            self.res['Content-Type'] = 'text/html; charset=utf-8'
            self.res.write(html)
            return self.res
        except ValueError as e:
            html = template(self.req, 'error.html', {
                'page': page,
                'description': 'Cannot accept the data for following reasons',
                'errors': [e.message],
                'suggest_link': ('javascript:history.back();', 'Go back'),
            })
            self.res.status = 406
            self.res['Content-Type'] = 'text/html; charset=utf-8'
            self.res.write(html)
            return self.res

    def delete(self):
        page = self.load()
        try:
            page.delete(self.req.user)
            self.res.status_code = 204
        except RuntimeError as e:
            self.res.status_code = 403
        return self.res

    def represent_html_edit(self, page):
        if page.revision == 0 and self.req.GET.get('body'):
            page.body = self.req.GET.get('body')
        return TemplateRepresentation({'page': page}, self.req, 'wikipage.edit.html')